我是 SQL
的新手,我一辈子都弄不明白为什么我不能做我在这里尝试的事情。我正在尝试在套餐旅行中获得最少数量的免费座位,并按套餐 ID 对它们进行分组。
第一个子查询有效,但第二个是我无法弄清楚的。它说
“where 子句”中的未知列 SuperPaket。
select Paket.PaketID as "SuperPaket", Beskrivning, Resa.AvgångStad, Resa.AvgångTid, Resa.AvgångDatum,
(select AnkomstTid from Resa where Resa.ResID in
(select ResID from PaketResa where PaketResa.PaketID = SuperPaket and Ordningsnr =
(select max(Ordningsnr) from PaketResa where PaketResa.PaketID = SuperPaket))) "AnkomstTid",
(select min(LedigaPlatser) from
(select sum(AntalPlatser - Count) "LedigaPlatser", ResID from(
select Bokning.ResID, AntalPlatser, sum(Bokning.AntalBiljetter) as Count from
(Resa inner join Bokning on Resa.ResID = Bokning.ResID) where Bokning.ResID in
(select PaketResa.ResID from PaketResa where PaketResa.PaketID = SuperPaket)
group by Bokning.ResID order by Count desc)
as CountTable group by ResID)
as T) "LedigaPlatser"
from ((Paket inner join PaketResa on Paket.PaketID = PaketResa.PaketID) inner join Resa on PaketResa.ResID = Resa.ResID) group by Paket.PaketID;
为什么这对第一个子查询有效但对第二个子查询无效?
更新.. 当我在 from 子句中放置“子子查询”时,似乎会出现错误。我不知道如何重写有问题的查询来解决这个问题,我真的很感激一些帮助。谢谢..
最佳答案
我不认为你可以在 mysql
和 oracle
的 where
子句中使用 column alias
Standard SQL disallows references to column aliases in a WHERE clause. This restriction is imposed because when the WHERE clause is evaluated, the column value may not yet have been determined.
You can use the alias in GROUP BY, ORDER BY, or HAVING clauses to refer to the column:
我对sql server
一无所知
已添加:
您的子查询可能没有获取 Paket.PaketId
。
尝试通过添加
from
子句
(select Paket.PaketID as "SuperPaket" from Paket)
如下
from (
(Paket inner join PaketResa on Paket.PaketID = PaketResa.PaketID)
inner join Resa on PaketResa.ResID = Resa.ResID),
(select Paket.PaketID as "SuperPaket" from Paket)
group by Paket.PaketID;
同时从第一个 select
中删除别名,然后说 select SuperPaket
关于mysql - SQL - where 子句中的未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12970268/