2014-09-03 2 views
0

я следующая структура таблицыКак присоединиться к таблицам: Столбец равен значению или равен нулю?

Table1:

+--------+ 
| foo_id | 
+--------+ 
|  1 | 
|  2 | 
|  3 | 
+--------+ 

Table2:

+--------+--------+ 
| foo_id | bar_id | 
+--------+--------+ 
|  1 |  1 | 
|  1 |  2 | 
|  1 |  3 | 
|  3 |  2 | 
+--------+--------+ 

Теперь я хочу, выход так:

+--------+--------+ 
| foo_id | bar_id | 
+--------+--------+ 
|  1 | 1  | 
|  2 | null | 
|  3 | null | 
+--------+--------+ 

Что пришел мой ум был таким, как

select table2.foo_id, table2.bar_id 
from table1 
left join table2 on table1.foo_id = table2.foo_id 
         and table2.bar_id = 1 

, но это не совсем работа, я получаю 3 линии для foo_id = 1.

Любые идеи?

Большое спасибо!

+0

@Andrwe на основе присоединиться к OP хочет тот, где 'bar_id = 1' –

+0

Какова цель получения такого вывода? – CodeNewbie

+0

@DStanley, спасибо, не видел вторую строку предложения join. – Andrew

ответ

5

Вам нужно всего лишь перейти от:

select table2.foo_id, table2.bar_id 
from table1 
left join table2 on table1.foo_id = table2.foo_id 
         and table2.bar_id = 1 

в

select table1.foo_id, table2.bar_id 
from table1 
left join table2 on table1.foo_id = table2.foo_id 
         and table2.bar_id = 1 

Вы по ошибке выбрали неправильную таблицу для вывода foo_id из

+1

Пятно на. Вот [SQLFiddle] (http://sqlfiddle.com/#!3/dd4bf/4), в котором показаны результаты двух запросов. – Andrew

+0

Спасибо, вот и все! –

+0

также, спасибо за комментарий с sqlfiddle. не знал, что сайт –

-1
select table2.foo_id, table2.bar_id 
from table1 
left join table2 on table1.foo_id = table2.foo_id 
where table2.bar_id = 1 or table2.bar_id is null 
+0

Что бы отбросить строку, где 'foo_id = 3' с выхода. –

+0

Я не думаю, что @DStanley, эта строка выбрана объединением и имеет значение null в таблице2.bar_id – isalgueiro

+0

Не думайте. Попробуй. 'table2.bar_id' равно 2 для' foo_id' = 3 – Laurence

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