Ho le seguenti due relazioni:Riscrittura di istruzioni WITH in istruzioni di subquery in SQL?
Game(id, name, year)
Devs(pid, gid, role)
Dove Game.id è una chiave primaria, e dove Devs.gid è una chiave esterna per Game.id.
In un previous post I made here, un altro utente è stato così gentile da aiutarmi a creare una query che trova tutti i giochi realizzati con la maggior parte degli sviluppatori che hanno realizzato quel gioco. La sua risposta ha usato una dichiarazione WITH, e io non ho molta familiarità con questi, dato che sono solo poche settimane per imparare SQL. Ecco la domanda di lavoro:
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)
Per il solo scopo di ottenere più familiarità con SQL, sto cercando di riscrivere la query utilizzando una sottoquery invece di un'istruzione with. Sto usando this Oracle documentation per aiutarmi a capirlo. Ho provato a riscrivere la query in questo modo:
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)
Per quanto posso dire, queste due query dovrebbero essere identiche. Tuttavia, quando provo a eseguire la seconda query, viene visualizzato l'errore
Msg 207, livello 16, stato 1, riga 6 Nome colonna non valido 'DevsCount'.
Qualcuno sa perché potrei ricevere questo errore o perché queste due query non sarebbero identiche?
Quale DBMS stai utilizzando? –
Sto lavorando su Microsoft Azure Cloud! – Kyle
Dovrai duplicare la sottoquery in ultimo dalla clausola –