sql условное соединение - PullRequest
1 голос
/ 02 марта 2011

У меня есть 3 таблицы:

table1:table1_col1, table1_col2,table1_col3
table2 : table1_col1, table2_col2,table2_col3
table3 : table1_col1, table3_col2,table3_col3

Как я пытался объяснить с помощью именования, table1: table1_col1 - это уникальный ключ, который может ссылаться на table2: table1_col1 или table3: table1_col1, но никогда на оба.Мне нужно сделать соединение между table1, table2, table3 так, чтобы:

join table1 with table2 if table1:table1_col1 = table2 : table1_col1
join table1 with table3 if table1:table1_col1  = table3 : table1_col1

Возможно ли это в синтаксисе sql?
Спасибо.

Ответы [ 2 ]

1 голос
/ 02 марта 2011

Полагаю, вам нужны соответствующие столбцы из таблиц 2 и 3.

select 
      t1.table_col1,
      t2.table2_col2,
      t2.table2_col3,
      t3.table3_col2,
      t3.table3_col3
   from
      table1 t1
         left join table2 t2
           on t1.table1_col1 = t2.table1_col1
         left join table3 t3
           on t1.table1_col1 = t3.table1_col1

Кроме того, если вам нужны только столбцы из соответствующей таблицы 2 или 3 и они имеют одинаковые типы данных, вы можете использовать функцию NVL (), например

select 
      t1.table_col1,
      nvl( t2.table2_col2, t3.table3_col2 ) as SecondCol,
      nvl( t2.table2_col3, t3.table3_col3 ) as ThirdCol
   from
      table1 t1
         left join table2 t2
           on t1.table1_col1 = t2.table1_col1
         left join table3 t3
           on t1.table1_col1 = t3.table1_col1
1 голос
/ 02 марта 2011

Вы можете использовать LFET JOIN:

FROM table1 
LEFT JOIN table2 ON table1.table1_col1 = table2.table1_col1
LEFT JOIN table3 ON table1.table1_col1  = table3.table1_col1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...