0

你能帮我修复这段代码吗?

SELECT Articolisti_Articoli.*
FROM Articolisti_Articoli, Articolisti_Incarichi
LEFT JOIN SitiWeb_Articoli
ON SitiWeb_Articoli.ArticoloID = Articolisti_Articoli.ID
WHERE SitiWeb_Articoli.ArticoloID IS NULL AND Articolisti_Articoli.IncaricoID = Articolisti_Incarichi.ID AND Articolisti_Incarichi.CategoriaID = 15

我收到此错误:

#1054 - 'on 子句'中的未知列 'Articolisti_Articoli.ID'

但如果我尝试简单的版本:

SELECT Articolisti_Articoli.*
FROM Articolisti_Articoli
LEFT JOIN SitiWeb_Articoli
ON SitiWeb_Articoli.ArticoloID = Articolisti_Articoli.ID
WHERE SitiWeb_Articoli.ArticoloID IS NULL 

...有用!:S

谢谢!

4

4 回答 4

1

似乎您混合了两种用于检索数据的解决方案:使用 where 和 join 子句,我提到的第二个奇怪的是只选择可能不能为空的空 articolod id (SitiWeb_Articoli.ArticoloID IS NULL)

考虑这个:

 SELECT Articolisti_Articoli.*
 FROM Articolisti_Articoli 
   LEFT JOIN Articolisti_Incarichi
     ON Articolisti_Articoli.IncaricoID = Articolisti_Incarichi.ID
   LEFT JOIN SitiWeb_Articoli
    ON SitiWeb_Articoli.ArticoloID = Articolisti_Articoli.ID
   WHERE Articolisti_Incarichi.CategoriaID = 15

并检查表“Articolisti_Articoli”中的“ID”列是否为“not null”关闭。

于 2013-08-26T22:10:42.527 回答
1

这是记录在案的:

http://dev.mysql.com/doc/refman/5.0/en/join.html

以前,逗号运算符 (,) 和 JOIN 的优先级相同,因此连接表达式 t1, t2 JOIN t3 被解释为 ((t1, t2) JOIN t3)。现在 JOIN 具有更高的优先级,因此表达式被解释为 (t1, (t2 JOIN t3))。此更改会影响使用 ON 子句的语句,因为该子句只能引用连接操作数中的列,并且优先级的更改会更改对这些操作数的解释。

所以查询将以这种形式失败:

SELECT ... FROM A, B JOIN C ON A.x = C.y

最好的解决方法是JOIN一致地使用语法:

SELECT ... FROM A JOIN B ON ... JOIN C ON A.x = C.y

在你的例子中,我会这样写:

SELECT aa.*
FROM Articolisti_Articoli aa
INNER JOIN Articolisti_Incarichi ai ON aa.IncaricoID = ai.ID
LEFT JOIN SitiWeb_Articoli sa ON sa.ArticoloID = aa.ID
WHERE sa.ArticoloID IS NULL AND ai.CategoriaID = 15
于 2013-08-26T22:47:08.167 回答
0

我解决了这个问题:

从Articolisti_Articoli中选择Articolisti_Articoli .*

于 2013-08-27T07:31:03.870 回答
0

您正在使用直接连接

SELECT * FROM table1,table2 WHERE table1.id=table2.id;

ON尝试使用join 语句的显式子句编写查询

SELECT 
    Articolisti_Articoli . *
FROM
    Articolisti_Articoli
        INNER JOIN
    Articolisti_Incarichi ON Articolisti_Articoli.{join column} = Articolisti_Incarichi.{other join column}
        LEFT JOIN
SitiWeb_Articoli ON SitiWeb_Articoli.ArticoloID = Articolisti_Articoli.ID
WHERE
    SitiWeb_Articoli.ArticoloID IS NULL AND Articolisti_Articoli.IncaricoID = Articolisti_Incarichi.ID AND Articolisti_Incarichi.CategoriaID = 15
于 2013-08-26T22:19:08.410 回答