2014-01-17 46 views
1

在T-SQL我有一個觀點,即包含聯接:最有效的執行條件加入

inner join db..address addr 
on addr.town = f.town 

我需要以某種方式修改這個連接,如果f.town是一個特定的值(比方說「abc」),它還包含另一個值(即「abcd」)。在所有其他情況下,它只需要f.town的價值。就像這樣:

inner join db..address addr 
on addr.town in ("abc", "abcd") 

我試圖做到這一點,但它不工作:

inner join db..address addr 
on (case when f.town = "abc" 
     then addr.town = f.town 
     else addr.town in (f.town, "abcd")) 

有什麼建議?

+0

你是怎麼寫這個問題混淆了我。你寫'它還包含另一個值',這讓我想到'UNION'這樣的東西,即額外的價值,從我讀過的評論和回答中,你想用另一個'替代'一些自定義價值,比如加入城鎮名稱與另一個翻譯的那個或什麼沿線?你能清楚嗎? – DrCopyPaste

+0

我正在尋找像twrowsell的答案。 :) 不管怎麼說,還是要謝謝你。 –

回答

1

這會做詭計嗎?

inner join db.address addr 
on f.town = addr.town OR (f.town='abc' AND addr.town ="abcd") 
+0

就是這樣,但在這種情況下,即使f.town不是「abc」,聯接也會包含城鎮「abc」和「abcd」。 –

+0

我已經對sql進行了編輯。 – twrowsell

+0

這正是我正在尋找的,謝謝。 :) –

0

如果我瞭解你,你正在嘗試創建一個類似於此的結構? 沒有測試過,這是一個混亂的事情 - 請提供樣品數據,如果你可以;

SELECT * 
FROM TableA A 
JOIN TableB B ON 1 = ( 
          CASE 
           WHEN A.Moo = B.Moo THEN 1 
           WHEN A.Moo = B.Moo + 'x' THEN 1 
           ELSE 0 
          END 
         ) 
+0

這類事情應該是IMO的最後一招。 – MarkD