SQL: условный оператор в условии соединения SQL - PullRequest
0 голосов
/ 29 ноября 2018

Я пытался соединить две таблицы на основе определенных условий, одно из условий - если мой флаг столбца содержит значение = 1, тогда я использую оператор "=" в противном случае "<>"

Это в основном яхочу сделать:

Select A.* from Table1 A Inner Join Table2
On A.ID Case Flag when 1 then = else <> end B.ID

Конечно, этот синтаксис неправильный, но это то, что я хочу сделать.

Ответы [ 4 ]

0 голосов
/ 29 ноября 2018

Я почти уверен, что ваше описание не то, что вы действительно хотите.

Я думаю, что вы действительно хотите флаг, который, когда 1, возвращает строки в Table1, которые находятся в Table2;и когда 0 возвращает строки в Table1, которых нет в Table2.

Один явный метод использует exists / not exists:

Select a.*
from Table1 a
where (flag = 1 and
       exists (select 1 from Table2 b where b.id = a.id)
      ) or
      (flag <> 1 and 
       not exists (select 1 from Table2 b where b.id = a.id)
      );

То естькогда flag = 1, тогда получите строки в Table1, чьи идентификаторы в Table2.Если flag <> 1, то получить строки в Table1, чьи идентификаторы НЕ в Table2.

Вы также можете реализовать эту версию логики, используя предложения LEFT JOIN и WHERE:

Select a.*
from Table1 a left join
     Table2 b
     on a.id = b.id
where (flag = 1 and b.id is not null) or
      (flag <> 1 and b.id is null);
0 голосов
/ 29 ноября 2018

Я предпочитаю не использовать или внутри соединений, поэтому:

Select A.* from Table1 A 
Inner Join Table2 On  A.ID = B.ID and Flag = 1
union
Select A.* from Table1 A 
Inner Join Table2 On  A.ID <> B.ID and Flag <> 1
0 голосов
/ 29 ноября 2018

Мой стиль:

    Select A.* 
    from Table1 A 
   Inner Join Table2 On case when Flag=1 then Convert(bit,1) else  Convert(bit,0) end = 
   case when (A=B) then Convert(bit,1) else Convert(bit,0) end
0 голосов
/ 29 ноября 2018

Просто используйте предложение ИЛИ в своем объединении:

Select A.* from Table1 A
Inner Join Table2
On (A.Flag = 1 AND A.ID = B.ID)
Or (A.Flag <> 1 AND A.ID <> B.ID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...