2013-08-26 11 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 идентификаторы, которые, вероятно, не может быть пустым (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 

и проверить колонку «ID» в таблице «Articolisti_Articoli» для «не нулевой» закрытия.

+0

'WHERE 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

Я решил с этим:

ВЫБОР Articolisti_Articoli. * ОТ Articolisti_Articoli РЕГИСТРИРУЙТЕСЬ Articolisti_Incarichi LEFT JOIN SitiWeb_Articoli ПО SitiWeb_Articoli.ArticoloID = Articolisti_Articoli.ID ГДЕ SitiWeb_Articoli.ArticoloID IS NULL И Articolisti_Articoli.IncaricoID = Articolisti_Incarichi.ID И Articolisti_Incarichi.CategoriaID = 15

Смежные вопросы