【问题标题】:Subquery - on clause column not visible子查询 - 子句列不可见
【发布时间】:2012-09-01 02:50:38
【问题描述】:

我在 Ubuntu 机器上的 mysql 5.1.41 环境中遇到一个奇怪的情况。

代码如下

SELECT spedizione0_.idspedizione,
    spedizione0_.*,
    (
        SELECT COUNT(n.idnegozio)
        FROM negozio n
        LEFT JOIN confezione c
            ON n.idnegozio = c.idnegozio
                AND c.idspedizione = spedizione0_.idspedizione
        WHERE n.datainizio <= spedizione0_.dataspedizione
            AND n.datafine >= spedizione0_.dataspedizione
            OR c.idspedizione != 0
        ) AS formula5_
FROM orocashgenerico.spedizione spedizione0_
ORDER BY spedizione0_.dataspedizione DESC

在这种情况下,错误提示:[Err] 1054 - Unknown column 'spedizione0_.idspedizione' in 'on Clause'

运行此查询的唯一方法是将 n.idnegozio=c.idnegozio 和 c.idspedizione=spedizione0_.idspedizione 上的 .. 更改为 on n.idnegozio=c.idnegozio 和 c.idspedizione=12

对我来说最奇怪的是:如果我将 and 条件移动到 where 子句中,查询会正确运行,当然结果不是我所例外的。

我的问题是问题出在哪里?
是不是跟 MySQL 版本有关?

【问题讨论】:

    标签: java mysql sql hibernate


    【解决方案1】:

    这是因为在您的子查询范围内找不到spedizione0_。试试这个,

    SELECT  spedizione0_.idspedizione,                     // add additionl columns
            COUNT(n.idnegozio) AS formula5_                
    FROM    spedizione spedizione0_
            LEFT JOIN confezione c
                ON c.idspedizion = spedizione0_.idspedizione
            LEFT JOIN negozio n
                ON n.idnegozio = c.idnegozio
    WHERE   (
                n.datainizio <= spedizione0_.dataspedizione AND 
                n.datafine >= spedizione0_.dataspedizione
            )
                OR c.idspedizione != 0
    GROUP By spedizione0_.idspedizione
    ORDER BY spedizione0_.dataspedizione DESC
    

    【讨论】:

      【解决方案2】:

      如我所见,您在这里使用了错误的语法。当您使用左外连接时,您不能在 ON 子句中提及多个条件。 在您的情况下,您需要在该 ON 子句之后再使用一个 Left join 子句来连接第三个给出错误的表。

      【讨论】:

      • 那不是真的,如果我使用“ON n.idnegozio = c.idnegozio AND c.idspedizione = 1”查询运行。所以我可以在 ON 子句中做多个条件....
      • 是的,但是在您的情况下,由于您要加入第三张桌子,因此无法完成..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      相关资源
      最近更新 更多