sql join, левый join. записи не отображаются, если есть критерии для правильной таблицы - PullRequest
1 голос
/ 05 октября 2011

Таблица a поля:

id_a

Таблица b поля:

id_b
id_b2
filed_b
filed_b2

Таблица c поля:

id_c
filed_c

таблица a данные:

id_a
----
1 
2 

таблица b данные:

id_b  id_b2  filed_b
----  -----  -------
1     1      1  
2     2      100 

таблица c данные:

id_c  filed_c
----  ---------
1     adfa11111
2     dfdf22222

присоединиться

a join b on id_a=id_b
b join c on id_b2=id_c

Цель состоит в том, чтобы получить все данные таблицы a и связанные данные filed_c. Критерий: if filed_b=100, list filed_c. otherwise leave filed_c null.

Проблема: используется левое соединение, если на правой таблице нет критериев, это нормально. Но как только в правой таблице есть критерии, записи, которых нет в правой таблице, не будут отображаться.

1 Ответ

2 голосов
/ 05 октября 2011

Хитрость для получения условия where для работы с левым внешним объединением состоит в том, чтобы поместить критерии в предложение объединения.Если вы проверили по b.filed_b в предложении where, вы исключите строки, в которых значения равны null, как это происходит, когда в таблице b нет совпадений.

Нечто подобное в вашем случае.

select *
from a
  left outer join b
    on a.id_a = b.id_b and
       b.filed_b = 100
  left outer join c
    on b.id_b2 = c.id_c
...