[英]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.