【问题标题】:Help with JOINs in query查询中的 JOIN 帮助
【发布时间】:2011-05-21 21:23:55
【问题描述】:
SELECT * FROM
Table_A
LEFT JOIN Table_B
 ON (Table_A.A_ID = Table_B.A_ID)
INNER JOIN Table_C ON (Table_C.C_ID = Table_B.C_ID)
WHERE Table_A.ID = 3

目前返回 0 行。

我该如何设置才能始终获得 Table_A,即使没有 Table_B 或 Table_C 的行。我还是想维护 Table_B 和 Table_C 之间的 INNER JOIN,这样我就永远不会得到没有 C 的 B。

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    子查询表B和表C。例如

    SELECT * 
    FROM Table_A 
    LEFT JOIN 
        (SELECT * 
             FROM Table_B
             INNER JOIN Table_C ON (Table_C.C_ID = Table_B.C_ID)
        ) B_AND_C ON (Table_A.A_ID = B_AND_C.A_ID)
    WHERE Table_A.ID = 3
    

    【讨论】:

      【解决方案2】:

      您可能不必使用内联视图。我现在不在一台装有 MySQL 的机器前,所以我无法检查,但你可以试试

      SELECT *
      FROM table_A a 
      LEFT JOIN (table_B b 
          INNER JOIN table_C c
          ON b.c_id = c.c_id)
      ON a.b_id = b.b_id
      WHERE 
          a.a_id =3
      

      【讨论】:

      • 如果 MySQL 允许这样的语法,这应该可以工作。 (并且基于documentation,应该是)。
      • 我赞成你的回答。实际上,我最终只是选择了 LEFT JOIN btw .. 由于 FK 约束,我总是将 B 和 C 放在一起.. 更简单的是 LEFT JOIN 两次
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多