2013-08-26 77 views
0

你能幫我解決這個問題嗎?加入時出錯mysql

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 - Unknown column 'Articolisti_Articoli.ID' in 'on clause'

但如果我嘗試簡單的版本:

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

...它的作品! :S

謝謝!

回答

1

好像你的retrieveing數據攪拌兩次不同的解決方案:哪裏,並可加入條款和我提到的第二個奇怪的是隻選擇空articolod IDS這可能不能爲空(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'列'非空'關閉。

+0

的'在哪裏Articolisti_Incarichi.CategoriaID = 15'應該進入'JOIN'條件,否則(左)外部連接將變成內部連接。 –

0

您使用的是straight join

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

嘗試用一個顯式ON子句編寫查詢聯接聲明

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 
1

這是記載:

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

Previously, the comma operator (,) and JOIN both had the same precedence, so the join expression t1, t2 JOIN t3 was interpreted as ((t1, t2) JOIN t3). Now JOIN has higher precedence, so the expression is interpreted as (t1, (t2 JOIN t3)). This change affects statements that use an ON clause, because that clause can refer only to columns in the operands of the join, and the change in precedence changes interpretation of what those operands are.

所以查詢將這種形式失敗:

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 
0

我解決了這個問題:

SELECT Articolisti_Articoli。* FROM Articolisti_Articoli JOIN 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