0

我在 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 - Unknown column 'spedizione0_.idspedizione' in 'on Clause'

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

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

我的问题是问题出在哪里?
与MySQL版本有关吗?

4

2 回答 2

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
于 2012-09-07T08:42:49.167 回答
0

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

于 2012-09-07T08:43:17.793 回答