2015-04-23 39 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

你尝试了吗?它给了你想要的结果吗?我没有在你的SQL中看到任何'CASE' .... – 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为空,而您加入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