我有三个表,所有表共享一个公共字段(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中存在多少次(或是否存在)。
提前谢谢!
答案 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