我正在学习一个教程,我不明白为什么我的查询不工作。
我有两个表:
authors
<表类>
id
名称
tbody><<tr>1 JK罗琳 2史蒂芬·金 3 阿加莎·克里斯蒂 4苏斯博士 表类>
首先,您应该使用限定列引用编写查询,以便更容易执行:
SELECT a.name, COUNT(*)
FROM books b JOIN
authors a
ON b.author_id = a.id
GROUP BY b.author_id;
为什么这个不行?显然SELECT
和GROUP BY
列是不同的!它们甚至不是来自同一个表。
下面的可以工作:
SELECT a.name, COUNT(*)
FROM books b JOIN
authors a
ON b.author_id = a.id
GROUP BY a.id;
如果将authors.id
声明为主键或unique
(这是很有可能的),则此操作将有效。这是因为一个叫做函数依赖的功能,它要求当唯一键或主键在GROUP BY
键中时引用任何列。
但是,如果没有这样的显式声明,那么在GROUP BY
子句中需要a.name
。
简单地说,任何未指定聚合函数的列都需要出现在group by语句中。
在你的情况下
select name, ..
需要group by name, ...