小编Kyl*_*yle的帖子

在SQL中将WITH语句重写为子查询语句?

我有以下两种关系:

Game(id, name, year)
Devs(pid, gid, role)
Run Code Online (Sandbox Code Playgroud)

Game.id是主键,Devs.gid是Game.id的外键.

我之前发表的一篇文章中,另一位用户非常友好地帮助我创建了一个查询,该查询可以找到大多数开发者制作该游戏的所有游戏.他的回答使用了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)
Run Code Online (Sandbox Code Playgroud)

为了更熟悉SQL,我试图使用子查询而不是WITH语句重写此查询.我一直在使用这个Oracle文档来帮助我解决这个问题.我尝试重写这样的查询:

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)
Run Code Online (Sandbox Code Playgroud)

据我所知,这两个查询应该是相同的.但是,当我尝试运行第二个查询时,我收到错误 …

sql with-statement azure-sql-database

7
推荐指数
1
解决办法
436
查看次数

有没有办法将SQL中的EXCEPT语句重写为NOT IN语句?

我学习 SQL 已经几周了,刚刚完成了一个关于使用 IN 和 NOT IN 的家庭作业问题。我设法得到了正确的答案,但是,我使用了 EXCEPT 子句,但我们实际上还不允许使用该子句。据我所知,EXCEPT 和 NOT IN 在 SQL 中是非常相似的语句,但我不明白有什么区别。这是我的查询的一般格式:

SELECT *
FROM table
WHERE x IN (
    SELECT x
    /* ... some subquery*/
    EXCEPT
    SELECT x
    /* ... some other subquery*/ 
)
Run Code Online (Sandbox Code Playgroud)

有没有办法重写这个通用查询而不使用 EXCEPT 语句?EXCEPT 和 NOT IN 一般有何不同?

编辑:另一篇文章似乎有一些很好的信息,但它似乎专注于 EXISTS 而不是 IN,它们有不同的目的,不是吗?

sql sql-except azure-sql-database

1
推荐指数
1
解决办法
1351
查看次数