【发布时间】:2015-06-29 15:16:05
【问题描述】:
我有以下两种关系:
Game(id, name, year)
Devs(pid, gid, role)
Game.id 是主键,Devs.gid 是 Game.id 的外键。
在previous post I made here 中,另一位用户非常友好地帮助我创建了一个查询,以查找由制作该游戏的最多开发者制作的所有游戏。他的回答使用了 WITH 语句,我对这些不是很熟悉,因为我只有几周的时间学习 SQL。这是有效的查询:
WITH GamesDevs (GameName, DevsCount)
AS
(
SELECT Game.name AS GameName, count(DISTINCT Devs.pid) AS DevsCount
FROM Game, Devs
WHERE Devs.gid=Game.id
GROUP BY Devs.gid, Game.name
)
SELECT * FROM GamesDevs WHERE GamesDevs.DevsCount = (SELECT MAX(DevsCount) FROM GamesDevs)
为了更加熟悉 SQL,我尝试使用子查询而不是 WITH 语句来重写此查询。我一直在使用this Oracle documentation 来帮助我解决这个问题。我尝试像这样重写查询:
SELECT *
FROM (SELECT Game.name AS GameName, count(DISTINCT Devs.pid) AS DevsCount
FROM Game, Devs
WHERE Devs.gid=Game.id
GROUP BY Devs.gid, Game.name) GamesDevs
WHERE GamesDevs.DevsCount = (SELECT MAX(DevsCount) FROM GamesDevs)
据我所知,这两个查询应该是相同的。但是,当我尝试运行第二个查询时,出现错误
消息 207,级别 16,状态 1,第 6 行无效的列名称“DevsCount”。
有谁知道我为什么会收到这个错误,或者为什么这两个查询不一样?
【问题讨论】:
-
您使用的是哪个 DBMS?
-
我在微软 Azure 云上工作!
-
您需要在最后一个 from 子句中复制该子查询
-
你说你是 SQL 新手?好,那么你不应该有太多的撤销:Bad habits to kick: using old-style joins
标签: sql azure-sql-database with-statement