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

Posted

技术标签:

【中文标题】MySQL:从两个表中获取结果,在第三个中计算匹配项【英文标题】:MySQL: Get results from two tables, count matches in a third 【发布时间】:2013-11-26 03:01:17 【问题描述】:

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

our_id 是 Table1 中的主键。

our_id 在 Table2 和 Table3 中也存在零次或多次。

我想选择our_id在Table1和Table2中都存在的记录,但我还需要计算our_id在Table3中出现的次数(或者甚至只是our_id在Table3中是否存在)。

我想出了这个:

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 的结果,并告诉我它在 Table3 中存在多少次(或是否存在)。

提前谢谢你!

【问题讨论】:

【参考方案1】:

您应该使用 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

【讨论】:

这听起来是对的!不过我刚刚尝试过,但出现错误:#1054 - Unknown column 'Table1.our_id' in 'on clause' 但该表和字段确实存在(我已经检查了十几次拼写!)。 大小写正确吗?您可能想尝试为所有表提供别名来解决此问题。 FROM Table1 t1, Table2 t2 然后使用ON t1.our_id = t3.our_id。我不知道可能出了什么问题,但也许这两件事中的一件会帮助你。 啊,我明白了!我不得不在FROM 行上交换Table1 和Table2(所以第二行读取FROM Table2, Table1)。非常感谢您的帮助,非常感谢。

以上是关于MySQL:从两个表中获取结果,在第三个中计算匹配项的主要内容,如果未能解决你的问题,请参考以下文章

划分两列并将结果设置在第三个 PHPMYADMIN 中?

如何匹配两个不同表中的列并将选定的列输出到 MySQL 中的第三个表?

sql语句中的full join具体是怎么回事啊?

MySQL 我可以在连接中计算并显示结果吗

MYSQL从两个表中选择匹配值[关闭]

如果一个表的列等于第二个表中的列,则在第三个表中插入值,python - mysql