MySQL LEFT JOIN 与 GROUP BY 和聚合运算符阻塞

标签 mysql group-by left-join aggregate-functions

我在 MySQL 中有两个表: ALUMNI 和 CALLRES 。

ALUMNI 表将 AlumID 作为其主键。它有 14483 条建议。

CALLRES 表以 CallKey 作为主键,并有一个字段 AlumID 已编入索引。 (它是 ALUMNI 的外键,但没有正式的约束指定它。)CALLRES 有大约 18000 个推荐。

以下查询工作正常。 (0.2 秒,14461 个结果行)

 SELECT    ALUMNI.AlumID, MAX(CALLRES.CallTime), COUNT(CALLRES.Outcome)
 FROM      ALUMNI JOIN CALLRES ON (ALUMNI.AlumID = CALLRES.AlumID)
 GROUP BY  ALUMNI.AlumID

但是,缺少列出没有 CALLRES 记录的 ALUMNI。 (数量不多:14483 - 14461 = 22 目前正在丢失。)

我想让它们进入列表,所以我想要一个 LEFT JOIN 而不是 JOIN。我猜想添加的记录在聚合列中将具有 NULL。

这样可以吗?

当我通过将“JOIN”更改为“LEFT JOIN”来更改查询时,我没有收到错误,但查询无限期地存在。所以:

 SELECT    ALUMNI.AlumID, MAX(CALLRES.CallTime), COUNT(CALLRES.Outcome)
 FROM      ALUMNI LEFT JOIN CALLRES ON (ALUMNI.AlumID = CALLRES.AlumID)
 GROUP BY  ALUMNI.AlumID

需要“永远”。感谢您的任何建议。

最佳答案

如果你想获取缺失的列表,你可以这样做:

SELECT ALUMNI.AlumID
FROM   ALUMNI LEFT JOIN CALLRES ON (ALUMNI.AlumID = CALLRES.AlumID)
WHERE  CALLRES.AlumID IS NULL

或者

SELECT ALUMNI.AlumID FROM ALUMNI
WHERE ALUMNI.AlumID NOT IN (SELECT AlumID FROM CALLRES)

我认为第一个SQL更好。

关于MySQL LEFT JOIN 与 GROUP BY 和聚合运算符阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51568398/

相关文章:

mysql - 使用 PHPMYADMIN 更新

java.net.SocketException : java.net.SocketException:打开的文件太多

python - 使用 pandas groupby 查找唯一的列组合并保存为 df

mysql - 使用左连接语法 SQL

mysql - 如何将子查询请求限制为一个?

mysql - 从 MySQL 中检索文本数据的 SQL 语句,其中字段中的每个单词都重复

r - 根据 group_by 行及其列值选择行

python - 使用 Python 中的 30 年基线计算气候异常

Mysql 查询消耗过多磁盘空间

mysql - Codeigniter SUM 和 LEFT JOIN 同时删除重复项