我有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
答案 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