2013-11-26 91 views
1

我有三個表,它們共享一個公共字段(our_id)。MySQL:從兩個表中獲取結果,在第三個中計數匹配

our_id是Table1中的主鍵。

our_id在表2和表3中也存在零次或多次。

我想選擇其中our_id同時存在於表1和表2的記錄,但我還需要指望有多少次our_id發生在表3(甚至只是是否our_id存在,或者未在表3)。

我想出了這一點:

SELECT Table1.*, Table2.*, COUNT(Table3.*) AS table3_count 
FROM Table1, Table2, Table3 
WHERE Table1.our_id = Table2.our_id 
AND Table1.our_id = Table3.our_id; 

...但如果our_id存在於表3,它可以這樣做,只是返回結果。

所以,我想:

SELECT Table1.*, Table2.*, COUNT(Table3.*) AS table3_count 
FROM Table1, Table2, Table3 
WHERE Table1.our_id = Table2.our_id 
    AND (Table1.our_id = Table3.our_id 
     OR NOT EXISTS (SELECT * FROM Table3 
         WHERE Table1.our_id=Table3.our_id)); 

但是,這只是跑啊跑......

我需要它仍然返回結果,其中同時存在於表1和表2 our_id,並且告訴我有多少次(或是否)存在於Table3中。

預先感謝您!

回答

2

您應該使用LEFT JOIN來引入表3。 LEFT JOIN返回左表(表1)中的所有行,並嘗試匹配右表(表3)中的行。如果Table3沒有任何匹配的行,則爲選定的Table3字段返回NULL。

SELECT Table1.*, Table2.*, t3.count 
FROM Table1, Table2 
LEFT JOIN (SELECT our_id, COUNT(*) AS count FROM Table3 GROUP BY our_id) t3 
ON Table1.our_id = t3.our_id 
WHERE Table1.our_id = Table2.our_id 
+0

這聽起來是正確的!我剛剛嘗試過,並且出現錯誤:'#1054 - 'on clause'中的未知列'Table1.our_id',但該表和字段完全存在(我已經檢查了十幾次拼寫現在!)。 – JoLoCo

+0

是否正確?你可能想嘗試給所有的表別名來解決這個問題。 '從Table1 t1,Table2 t2',然後使用'ON t1.our_id = t3.our_id'。我不知道什麼可能是錯的,但也許這兩件事中的一件會幫助你。 –

+0

啊,我明白了!我必須在「FROM」行的Table1和Table2之間進行交換(所以第二行讀取'FROM Table2,Table1')。非常感謝您的幫助,我非常感謝。 – JoLoCo

相關問題