2015-04-23 104 views
0

我必須使用一個條件語句中加入(SQL Server)的SQL狀態連接語句

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 = B.id) or 
    ((B.id is null or B.id = '') and A.id2 = B.id2) 

回答

0

我覺得這不是解決這個問題的最好方法,但可能有用,也很簡單:

SELECT * FROM a INNER JOIN b 
ON a.id = b.id 
UNION 
SELECT * FROM a INNER JOIN b 
ON a.id2 = b.id2 
WHERE b.id IS NULL OR b.id = '' 
+0

我不認爲這會得到OP想要的結果。我相信否定'b.id IS NULL或b.id ='''條件應該被添加到第一部分。 – vesan

0
select * from A inner join B 
on (A.id = B.id) OR ((B.id is null or B.id = '') && (A.id2 = B.id2)) 
0

使用CASE聲明

SELECT * 
FROM A 
INNER JOIN B 
ON CASE 
     WHEN B.id IS NULL OR B.id = '' THEN A.id2 
     ELSE A.id 
    END 
    = 
    CASE 
     WHEN B.id IS NULL OR B.id = '' THEN B.id2 
     ELSE B.id 
    END 
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