2015-11-17 2 views
1

Это абстракция проблемы, которая у меня есть. У меня есть две таблицы:MySQL: JOIN table B, но таблица возврата A, если нет совпадений в таблице B

id name 
-- ------ 
1 Frank 
2 Tom 

id bar drink 
-- --- ----- 
1 5 water 
1 5 beer 
1 6 wine 
2 5 milk 

Я хочу, чтобы выбрать идентификатор 1, 5 бар и получить Франк и все его напитки в баре 5.

id: 1, name: Frank, bar: 5, drink: water 
id: 1, name: Frank, bar: 5, drink: beer 
id: 1, name: Frank, bar: 5, drink: wine 

Но когда я выбираю идентификатор 1 и 9 бар I хочу получить Фрэнка без напитков.

id: 1, name: Frank 

Я пробовал с левым объединением присоединиться присоединиться, но я всегда получаю нежелательные напитки в других барах. Я пытаюсь сделать этот запрос с MySQL.

ответ

1

Это left join запрос с тщательной фильтрации:

select t1.*, t2.bar, t2.drink 
from t1 left join 
    t2 
    on t1.id = t2.id and t2.bar = 9 
where t1.name = 'Frank'; 

left join гарантирует, что все строки в первой таблице, в выходных данных. Затем where фильтрует эти строки, чтобы получить нужное имя. Ключом к этому является предложение on с условием на второй таблице. Если есть совпадение, вы получите соответствующие строки во второй таблице. В противном случае вы получите строку с значениями NULL в столбцах t2.

+1

Отлично! Спасибо за объяснение. .. и t2.bar = 9 после этого была моя недостающая часть – Delcon

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