MySQL多子查询优化

标签 mysql

我有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/

相关文章:

php - PHP:注意:未定义索引

mysql - 从每一行中的另一列中减去一列的内容

MySql order by (varchar) date in Mmm-dd-yyyy

mysql - 如何将互连的 id 对列表转换为 id 簇?

mysql - Innodb 引擎和 Myisam 引擎

MYSQL - 将数据拆分为多行

mysql - 将存储函数与 C API 和准备好的语句一起使用

php - Openshift 上的 MYSQL 5.1 上的错误 2003

MySQL 查询 : Query with conditional statements

mysql - mysql 查询 ruby​​/mysql 的大小限制