我面对一个奇怪的情况,在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版本有关?
先谢谢 麦酒
答案 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
希望这有帮助
答案 1 :(得分:0)
我可以看到,你在这里使用了错误的语法。使用左外连接时,不能在ON子句中提及多个条件。 在您的情况下,您需要在该ON子句之后再使用一个Left join子句来连接给出错误的第3个表。