【发布时间】:2019-01-05 04:40:38
【问题描述】:
我在 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
需要“永远”。感谢您的建议。
【问题讨论】:
-
与所有相关表的 SHOW CREATE TABLE 语句一样,有关查询性能的问题总是需要对给定查询进行解释
标签: mysql group-by left-join aggregate-functions