2012-04-18 3 views
0

ТАБЛИЦА A, B, CMYSQL JOINS с 3 таблицами

Как я могу сделать запрос, который объединяет эти три таблицы. Условие состоит в том, что Table A должен иметь запись.

Я попытался как этот

select * from a 
left join b on a.article_id = b.article_id 
left join c on b.file_id = c.submission_id 
where c.user_id = 6; 

Мой запрос не работает в том случае, если Table C отсутствует запись. В этом случае соединение не работает для трех таблиц.

ответ

2

Любые критерии внешних таблиц должны быть заключены в соответствующее предложение ON, а не в предложение WHERE.

Например:

select * from a 
left join b on a.article_id = b.article_id 
left join c on b.file_id = c.submission_id and c.user_id = 6; 
+0

Я думаю, что это то, чего он хочет. Вопрос не был все, чтобы очистить:] – Konerak

+0

Простите, но проблема была в моем подходе. Я исправил проблему. – SupaOden

+0

@ Konerak, отсутствие предложения WHERE int eh final query немного подозрительно, но я думал, что это безопасный ответ, потому что, по моему опыту, это самая распространенная проблема, которую я вижу в вопросах mysql на SO. –

1

Если вы используете LEFT JOIN, то записи из a и b выбраны, даже если нет соответствующих записей в таблице c. Используйте вместо этого INNER JOIN:

SELECT * FROM a 
INNER JOIN b ON a.article_id = b.article_id 
INNER JOIN c ON b.file_id = c.submission_id 
WHERE c.user_id = 6; 
+0

Я пробовал это, но в случае, если в таблице C отсутствует совпадение, оно не отображает запись. – SupaOden

+0

«Условие состоит в том, что таблица A должна иметь запись« – Konerak

+0

@asdgfassagas решит, что вы хотите. Вы хотите ** все ** записи с 'a' в любом случае, а также записи из' b' и 'c' в случае наличия соответствующих записей? Затем используйте ответ Айка. –

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