【发布时间】:2014-08-25 02:55:25
【问题描述】:
我有一个从数据库请求数据的 SQL 语句。
SELECT `ID`, `To`, `Poster`, `Content`, `Time`, ifnull(`Aura`,0) as `Aura` FROM (
SELECT * FROM (
SELECT DISTINCT * FROM messages m
INNER JOIN
(
SELECT Friend2 as Friend FROM friends WHERE Friend1 = '1'
UNION ALL
SELECT Friend1 as Friend FROM friends WHERE Friend2 = '1'
) friends ON m.Poster = friends.`Friend`
UNION ALL SELECT DISTINCT *, '1' FROM messages where `Poster`='1'
) var
LEFT JOIN
(
select `ID` as `AuraID`, `Status` as `AuraStatus`, count(*) as `Aura`
from messages_aura
) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)
) final
GROUP BY `ID`, `Poster`
ORDER BY `Time` DESC LIMIT 10
这是我的messages_aura 表格布局。它显示ID、Status 和UserID。
这是上述语句的输出。
(上面截图中的ID指的是下面的Poster,上面截图中的Status指的是下面的ID)
该语句应为底行的 Aura 计数 1 和顶行的 Aura 计数 2。怎么了?
【问题讨论】:
-
子查询中需要
GROUP BY,不是吗? -
你是对的!谢谢,我不敢相信这很容易xD
-
我不敢相信这个问题如此普遍。我们可能必须每天多次发布这种答案。
-
mySQL 对 group by 的扩展支持是 (IMO) 大多数使用聚合和 mysql 的开发人员面临的最大问题。这个extended support 会给大多数人带来麻烦。我认为我们最好默认禁用该功能。数据库通过一个不带分组依据的聚合来隐藏 ANSII 标准 SQL 错误。