MySQL:从两个表中获取结果,在第三个表中计算匹配

时间:2013-11-26 03:01:17

标签: mysql

我有三个表,所有表共享一个公共字段(our_id)。

our_id是Table1中的主键。

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

我想选择Table1和Table2中存在our_id的记录,但我还需要计算表3中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;

...但是只返回表3中存在our_id的结果,这可能不会。

所以我试过了:

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));

但那只是奔跑并跑了......

我需要它仍然返回Table1和Table2中存在our_id的结果,并告诉我表3中存在多少次(或是否存在)。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

你应该使用LEFT JOIN来引入Table3。 LEFT JOIN返回左表(Table1)中的所有行,并尝试匹配右表(Table3)中的行。如果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