[英]SQL - Unknown column in where clause
我對SQL
相當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
子句中使用列別名
標准SQL不允許在WHERE子句中引用列別名。 之所以施加此限制,是因為在評估WHERE子句時,可能尚未確定列值。
您可以在GROUP BY,ORDER BY或HAVING子句中使用別名來引用該列:
我對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
您的列是Paket.PaketID而不是“ SuperPaket”,因此無論您在哪里使用superpaket,都應使用Paket.PaketID
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 = Paket.PaketID and Ordningsnr =
(select max(Ordningsnr) from PaketResa where PaketResa.PaketID = Paket.PaketID))) "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 = Paket.PaketID)
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.