2011-06-23 29 views
1

我有4个表,它们用另一个外键连接在一起,例如表2有fk_table1,表3有fk_table2,表4有fk_table3。左连接1表到MYSQL中的多个表

该链中的前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 

回答

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 
+0

这完全是我想要的。 –

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 
+0

当LEFT JOIN T3 ,是T3左加入只有T2或T1和T2的已加入表格 –

+0

@Willian:你是说你想要T2和T3是非可选的吗?如果是这样,那么你需要遵循唐的建议,并在这里使用内部连接。 –

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