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