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

MySQL:从两个表中获取结果,在第三个表中计算匹配项,mysql,Mysql,我有三个表,它们都共享一个公共字段 我们的_id是表1中的主键 我们的_id在表2和表3中也存在零次或多次 我想选择表1和表2中都存在我们的\u id的记录,但我还需要计算我们的\u id在表3中出现的次数,甚至仅仅是我们的\u id在表3中是否存在 我想到了这个: SELECT Table1.*, Table2.*, COUNT(Table3.*) AS table3_count FROM Table1, Table2, Table3 WHERE Table1.our_id = Table

我有三个表,它们都共享一个公共字段

我们的_id是表1中的主键

我们的_id在表2和表3中也存在零次或多次

我想选择表1和表2中都存在我们的\u id的记录,但我还需要计算我们的\u id在表3中出现的次数,甚至仅仅是我们的\u 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中存在我们的_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));
但那只是跑了又跑

我需要它仍然返回表1和表2中都存在我们的_id的结果,并告诉我有多少次,或者它是否存在于表3中


提前谢谢你

您应该使用左连接来引入表3。左联接返回左表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

听起来是对的!虽然我刚刚尝试过,但我得到了一个错误:1054-未知列“Table1.our_id”在“on子句”中,但该表和字段肯定存在,我已经检查了十几次拼写了!。情况是否正确?您可能希望尝试为所有表提供别名以解决此问题。从表1 t1到表2 t2,然后在t1上使用。我们的id=t3。我们的id。我不知道会出什么问题,但也许这两件事中的一件会帮到你。啊,我明白了!我不得不在FROM行中交换表1和表2,所以第二行是表2,表1。非常感谢你的帮助,我真的很感激。