MySQL外连接与连接表具有多个表的依赖关系

时间:2012-01-04 17:56:17

标签: mysql sql join left-join

我有3张表A,B和T

T分别持有表A和B的外键。

现在我想获得(A,B,T)的所有行,即使T为空。

SELECT * from

A
LEFT OUTER JOIN T t1 ON t1.A_ID = A.id,
B
LEFT OUTER JOIN T t2 ON t2.B_ID = B.id

WHERE A.B_ID = B.ID

现在的问题是我得到了太多行,所以我添加了以下内容:

AND t1.id = t2.id

但是现在我完全没有通过包括LEFT OUTER JOIN在一开始就避免使用的行。

编辑:除了任何样本数据或表格布局之外,我的问题仅仅是在这种情况下A + B需要2个左外连接的具有外键关系依赖性的表T,如上所述或者还有另一种方式?

简单地在第二个左连接中引用表A,就像一些用户建议的那样无法工作,因为它超出了范围,也解释了 here
因此,如果你用parens包围这两个表,它就可以工作:

SELECT * from (A, B)
LEFT OUTER JOIN T t ON t.A_ID = A.id and t.B_ID = B.id

3 个答案:

答案 0 :(得分:3)

尝试

select *
from A
join B on A.B_ID = B.ID
left join T on T.A_ID = a.id and T.B_ID = b.id

..假设我已正确理解你的问题,并打算在A和B之间进行常规的内部联接

答案 1 :(得分:3)

尝试此查询: 如果A和B没有任何关系:

SELECT * FROM
(A, B)
LEFT OUTER JOIN T ON T.A_ID = A.id
AND T.B_ID = B.id

如果A和B有关系,最后添加这一行:

WHERE A.B_ID = B.ID

答案 2 :(得分:0)

如果我理解正确,那么这可能对你有用吗?

SELECT * from
A
LEFT OUTER JOIN T t1 ON t1.A_ID = A.id,
B
LEFT OUTER JOIN T t2 ON (t2.B_ID = B.id AND t1.id = t2.id)

WHERE A.B_ID = B.ID