我有3张 table
Table1 有 id 单元格
表2有id单元格
Table3 有 id1 单元格 -> 对应于 Table1.id
Table3 有 id2 单元格 -> 对应于 Table2.id
我需要一个结果来计算 id1 和 id2 对在 Table3 中出现的次数,以及未出现的结果。
所以不能使用简单的 按 id1、id2 从 table3 组中选择 *。
我用过
SELECT *
FROM table1, table2,
(SELECT COUNT(*) AS count
FROM table3
GROUP BY id1, id2)
GROUP BY table1.id, table2.id
但是它像糖蜜一样慢而且不起作用。
最佳答案
尝试下一个查询:
1) 首先,我们交叉连接 table1 和 table2 以获取所有组合元组。
2) 其次,我们将连接留给 table3。
3) 我们计算每个元组获得的行数,计算 table3->id1 上的非空值(假设类型为 <null, id>
的元组或<id, null>
表3 上不存在)
SELECT
t1.id, t2.id, COUNT(t3.id1) AS count
FROM
table1 AS t1
CROSS JOIN
table2 AS t2
LEFT JOIN
table3 AS t3 ON t3.id1 = t1.id AND t3.id2 = t2.id
GROUP BY
t1.id, t2.id
关于MySQL多子查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53075769/