SQL子查询不起作用

时间:2017-01-06 13:57:58

标签: mysql sql

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

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

但我收到错误

  

1054 - 未知专栏' GenreCount'在'字段列表'

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

1 个答案:

答案 0 :(得分:4)

您正在使用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

此替代方法也使用子查询,但与原始查询中的不相关。我希望连接方法一般运行得更快。