我有4个表,它们用另一个外键链接在一起,例如表2有fk_table1,表3有fk_table2,表4有fk_table3。
此链中的前3个表都具有每个条目的相应数据。但是,表4包含可选数据,因此,表3中的字段可能没有相应的条目。
但我也想要表4中的数据。这是我现在拥有的,但不起作用。
SELECT *
FROM T1, T2, T3 LEFT JOIN T4
WHERE T1.t1 = T2.t1
AND T2.t2 = T3.t2
AND T3.t3 = T4.t3
答案 0 :(得分:4)
如果只有T4
是可选的,请仅在该表上使用LEFT JOIN
:
SELECT *
FROM T1
JOIN T2 ON T1.t1 = T2.t1
JOIN T3 ON T2.t2 = T3.t2
LEFT JOIN T4 ON T3.t3 = T4.t3
答案 1 :(得分:2)
试试这个:
SELECT *
FROM T1
LEFT JOIN T2 on T1.t1 = T2.t1
LEFT JOIN T3 on T2.t2 = T3.t2
LEFT JOIN T4 on T3.t3 = T4.t3
<强>更新强>
或者,如果您只想包含T1,T2或T3中有适当行的行,则需要使用内部联接。
SELECT *
FROM T1
INNER JOIN T2 on T1.t1 = T2.t1
INNER JOIN T3 on T2.t2 = T3.t2
LEFT JOIN T4 on T3.t3 = T4.t3
答案 2 :(得分:0)
要分离表连接的逻辑,可以使用括号:
select
*
from
t1
inner join t2 on t1.some_id = t2.some_id
inner join (
t3
left join t4 on t3.some_id = t4.some_id
) on t2.some_id = t3.some_id