子查询 - on子句列不可见

时间:2012-09-07 08:25:18

标签: java mysql sql hibernate

我面对一个奇怪的情况,在ubuntu机器上的mysql 5.1.41环境中使用sql查询。

代码如下

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 - 'on clause'中的未知列'spedizione0_.idspedizione'

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

对我来说最奇怪的事情是:如果我将条件移动到where子句,查询运行正确,cource结果不是我所想的。

我的问题是问题出在哪里?是否与MySql版本有关?

先谢谢 麦酒

2 个答案:

答案 0 :(得分: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

希望这有帮助

enter image description here

答案 1 :(得分:0)

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