2015-04-23 4 views
0

я должен использовать условный оператор в присоединиться:Дело в SQL присоединиться заявление

select * from A inner join B 
on A.id = B.id 

если B.id is null or B.id = '' or A.id is null or A.id = '' она должна быть A.name = B.name, вместо A.id = B.id

Я должен использовать условный оператор в присоединиться:

select * from A inner join B 
on A.id = B.id 

если B.id is null or B.id = '' должно быть A.id2 = B.id2 вместо A.id = B.id ,

Правомерно ли я сделать что-то вроде этого:

select * 
from A inner join B on 
    (B.id is not null and B.id <> '' and A.id is not null and A.id <> '' and A.id = B.id) or 
    ((B.id is null or B.id = '' or A.id is null or A.id = '') and A.name = B.name) 
+0

Пробовали ли вы его? Получили ли вы результаты, которые вы хотели? Я не вижу никаких «CASE» в вашем SQL ... – Tim

+1

Дубликат [условие SQL в заявлении о соединении] (http://stackoverflow.com/questions/29813333/sql-condition-in-join-statement), пожалуйста не задавайте один и тот же вопрос два раза подряд – sqluser

ответ

0

Я думаю, что вы хотите что-то вроде этого:

select * from A 
inner join Bid on 
    (Bid.id is not null and Bid.id <> '' and A.id is not null and A.id <> '' and A.id = Bid.id) 
inner join Bname on 
    ((Bname.id is null or Bname.id = '' or A.id is null or A.id = '') and A.name = Bname.name) 

, который должен вступить в B таблице дважды, один присоединиться к когда id не является нулевым, а второе объединяется, когда id имеет значение null, и вместо этого вы присоединяетесь к столбцу name. Это эффективно работает как оператор case, потому что два соединения с таблицей B являются взаимоисключающими.

0

Попробуйте

select * from A inner join B 
on (A.id = B.id) or 
(A.name = B.name and (B.id is null or B.id = '' or A.id is null or A.id = '')) 
0

попробовать этот код

DECLARE @b varchar(50)=(SELECT id FROM b) 
DECLARE @a varchar(50)=(SELECT id FROM a) 
if ((@b in (null , '')) and (@a in (null , ''))) 

BEGIN 

select * from A inner join B 
on 
A.name = B.name 

END 
else 

BEGIN 

select * from A inner join B 
on A.id = B.id 

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