簡體   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