mysql左join与group by和aggregate操作符阻塞

epfja78i  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(268)

mysql中有两个表:校友和callres。
校友表的主键是alumid。它有14483个记录。
callres表的主键是callkey,它有一个索引字段alumid(它是校友的外键,但没有正式的约束条件来指定。)callres有大约18000个REC。
下面的查询工作正常(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记录的校友(没有太多:14483-14461=22正在丢失。)
我想让他们在列表中,所以我想左连接,而不是连接。我猜添加的记录在聚合列中将有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

需要“永远”。谢谢你的建议。

h6my8fg2

h6my8fg21#

如果要获取缺少的列表,可以执行以下操作:

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更好。

相关问题