繁体   English   中英

SQL-where子句中的未知列

[英]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子句中放入“子查询”时,似乎出现了错误。 我不知道如何重写有问题的查询来解决此问题,我将非常感谢您的帮助。 谢谢..

我认为您不能在mysqloraclewhere子句中使用列别名

从mysql文档

标准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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM