2012-04-18 46 views
0

表A,B,C與3個表的MYSQL聯接

如何創建一個連接這三個表的查詢。條件是Table A必須有記錄。

我試過這樣

select * from a 
left join b on a.article_id = b.article_id 
left join c on b.file_id = c.submission_id 
where c.user_id = 6; 

我的查詢沒有的情況下工作,即Table C缺少記錄。在這種情況下,連接不適用於這三個表。

回答

2

外表上的任何條件都必須是int相關的ON子句,而不是WHERE子句。

例如:

select * from a 
left join b on a.article_id = b.article_id 
left join c on b.file_id = c.submission_id and c.user_id = 6; 
+0

我想這就是他想要的。問題並不是全部要清楚:] – Konerak 2012-04-18 14:55:54

+0

對不起,但問題出在我的方法。我已經糾正了這個問題。 – SupaOden 2012-04-18 14:57:23

+0

@Konerak,缺少WHERE子句int eh最終查詢有點可疑,但我認爲這是一個安全的答案,因爲根據我的經驗,這是我在SO上的mysql問題中看到的最常見的問題。 – 2012-04-18 15:05:54

1

如果使用LEFT JOIN,然後從ab記錄被選中,即使有表c沒有相應的記錄。改爲使用INNER JOIN

SELECT * FROM a 
INNER JOIN b ON a.article_id = b.article_id 
INNER JOIN c ON b.file_id = c.submission_id 
WHERE c.user_id = 6; 
+0

我試過這個,但是在表C缺少匹配的情況下,它不顯示記錄。 – SupaOden 2012-04-18 14:50:27

+0

'條件是表A必須有記錄' – Konerak 2012-04-18 14:50:36

+0

@asdgfassagas決定你想要什麼。無論如何,你是否希望來自'a'的所有**記錄,以及是否有相應記錄的'b'和'c'的記錄?然後用艾克的答案。 – 2012-04-18 14:51:51