我正在尝试编写这样的子查询

SELECT GenreNaam,
GenreCount = (SELECT COUNT(GK.GenreID)
              FROM GenreKoppel GK
              WHERE GK.GenreID = G.GenreID)
FROM Genre G


但是我得到了错误


  1054-“字段列表”中的未知列“ GenreCount”


我是子查询的新手,我做错了什么。

最佳答案

您正在使用SQL Server样式别名定义,该定义在My​​SQL中不起作用。而是使用AS指示别名(或仅在子查询后仅声明别名的名称)。

SELECT GenreNaam,
       (SELECT COUNT(GK.GenreID) FROM GenreKoppel GK
        WHERE GK.GenreID = G.GenreID) AS GenreCount   -- or just GenreCount
FROM Genre G


此查询也可以使用联接来编写:

SELECT G.GenreNaam,
       COALESCE(GK.GenreCount, 0) AS GenreCount
FROM Genre G
LEFT JOIN
(
    SELECT GenreID, COUNT(*) AS GenreCount
    FROM GenreKoppel
    GROUP BY GenreID
) GK
    ON G.GenreID = GK.GenreID


这种替代方法也使用子查询,但与原始查询中的子查询不同,它没有关联。我希望加入方法通常能更快地运行。

关于mysql - SQL子查询不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41507312/

10-08 21:17