【问题标题】:SQL Query: Reference Another Table data for two variables in the same querySQL 查询:在同一查询中为两个变量引用另一个表数据
【发布时间】:2012-06-04 10:59:06
【问题描述】:

我正在尝试运行一个 MYSQL 查询,我需要在目标中两次从源表中获取相同的“信息”... 让我解释一下:

2 个表格:“事件”和“存档事件”。 “存档事件”是一个“链接”——将当前打开的事件连接到过去(关闭的)事件。 此表仅包含 Events 表中 Event_ID 的 id。

我想要做的是获取存档表中每个组合的事件标题。

EG:

   -----------------------------------
   |       ARCHIVE TABLE             |
   |PK|ClosedEventID |CurrentEventID |
   |1 |      5       |       3       |
   |2 |      2       |       3       |
   -----------------------------------

   -----------------------------------------
   |      EVENTS TABLE                     |
   |Event_ID | Event_Title | ............. |
   |    1    | Party 1     | ............. |
   |    2    | Party 2     | ............. |
   |    3    | Wedding 1   | ............. |
   |    4    | Funeral 1   | ............. |
   |    5    | Pancake     | ............. |
   ----------------------------------------

我猜这将是一个 join 或 union 之类的;我的 SQL 是公平的,但我正在努力解决这个问题。

所以我想要做的是,一旦运行查询,归档事件表中的每个“对”都将如下所示(以便我可以在 PHP 中处理它......):

   -----------------------------------
   |       ARCHIVE TABLE             |
   |PK|ClosedEventID |CurrentEventID |
   |1 | Pancake      |   Wedding 1   |
   |2 | Party 2      |   Wedding 1   |
   -----------------------------------

提前感谢您的帮助! :)

【问题讨论】:

    标签: php mysql join union


    【解决方案1】:
    SELECT PK, e1.Event_Title AS ClosedEventID, e2.Event_Title AS CurrentEventID
    FROM   ARCHIVE
      JOIN EVENTS AS e1 ON e1.Event_ID = ARCHIVE.ClosedEventID
      JOIN EVENTS AS e2 ON e2.Event_ID = ARCHIVE.CurrentEventID
    

    sqlfiddle 上查看。

    了解SQL joins

    【讨论】:

    • 我了解连接的理论,我已经很久没有使用它们了——我的 sql 教科书没有帮助。从来不知道 sqlfiddle - 很方便,谢谢 :)
    【解决方案2】:

    这很简单:

    SELECT
        a.pk as "pk",
        e1.event_title as "closed_event",
        e2.event_title as "current_event"
    FROM
        events as e1
        JOIN archive as a on e1.event_id = a.closed_event_id
        JOIN events as e2 on a.current_event_id = e2.event_id
    

    【讨论】:

    • "相当简单";事后看来,是的 - 但我是那种过于复杂的类型:P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2018-07-02
    • 2013-12-20
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    相关资源
    最近更新 更多