mysql - SQL - where 子句中的未知列

标签 mysql sql subquery

我是 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 子句中使用 column alias

From mysql docs

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/

相关文章:

php - 与mysql语句混淆,三张表

php - 图像上传与形式发送内容

sql - 查询以填补记录之间的空白(数据)SQL

mysql - SQL Sum 查询行为异常?

php - PHP 中的 MySql 子查询未产生正确的结果

mysql - 缺少在 F3 中使用 SQL 的 HAVING 子句的选项

sql - 从 View 中插入临时表非常慢

sql - 索引没有被使用

mysql - 使用子查询排除值

mysql - 如何在querydsl中使用mysql now()函数?