2015-09-23 5 views
1

я имел 2 таблицы объединяясь и возвращением того, что я хотел с:саз в SQL с кратному присоединяется

SELECT a, b, table_one.c, d, e 
from table_one INNER JOIN table_two ON table_two.c=table_one.d 
WHERE table_two.c 

У меня есть третий стол, table_three, который также имеет столбец с. Мне нужен столбец с флагом (например, логическим) того, будет ли значение отображаться в третьей таблице. Я пытался сделать аргумент case и левое соединение для этого, но я не могу понять синтаксис.

Я знаю, что я мог бы поставить дело так, как еще один столбец после SELECT, что-то вроде:

SELECT a, b, table_one.c, d, e 
    , case table_three.c 
      when table_three.other_column_in_table_three ISNULL THEN true   
      ELSE false 
     END 
from table_one INNER JOIN.... 

Но я не уверен, что это совершенно правильно, и я понятия не имею, как добавить присоединиться на левый этот запрос. Это правильная идея, и если да, то как работает синтаксис?

+0

Что СУБД вы используете? –

+0

Я использую postgres – swinters

+0

Случайное выражение, а не регистр case ... – jarlh

ответ

2

Более простой подход

select a, b, table_one.c, d, e 
    , table_three.other_column is not null as flag 
from table_one inner join table_two on table_one.d = table_two.c 
    left join table_three on -- put here the relation rules between table_three 
           -- and the other tables 
+0

поэтому для правил отношения между таблицей 3, я думаю, что это должно быть просто: table_three.c = table_one.d --- так же, как объединение table_one и table_two , но что мне нужно для «и других таблиц»? – swinters

1

В MSSQL вы можете попробовать:

SELECT a, b, table_one.c, d, e, ISNULL(table_three.c, true) 
from table_one 
INNER JOIN table_two ON table_two.c = table_one.d 
LEFT JOIN table_three ON table_two.c = table_three.c 
Смежные вопросы