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:从两个表中获取结果,在第三个中计算匹配项的主要内容,如果未能解决你的问题,请参考以下文章