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