2013-12-23 67 views
0

我想做到這一點:選擇帶有IN

SELECT 
     CASE WHEN var in (SELECT var FROM var_table) THEN 'var1' 
     ELSE 'var2' 
     END AS myvar 

但抱怨這一點。我該如何避免必須在查詢內部將var的整個列表粘貼到var_table中。順便說一句,這是Teradata。

謝謝!

回答

3

你必須有一個很舊版本的Teradata作爲標量子查詢像這樣因爲TD13支持。

即使它們被支持,我總是會嘗試重寫它們(在任何DBMS中不僅僅是TD)。你的是一個隱藏的外部聯接(假設它是包含FROM的查詢的前幾行):

SELECT 
    CASE WHEN t1.var IS NOT NULL THEN 'var1' ELSE 'var2' END AS myvar 
FROM t1 LEFT JOIN var_table AS t2 
ON t1.var = t2.var 
-1

試試這個

SELECT 
     CASE WHEN var is null THEN 'var2' 
     ELSE 'var1' 
     END 
from var_table 
+0

爲什麼downvote我能知道嗎? – Amit

+0

這根本不會返回相同的結果。 – dnoeth

+0

說我得到var =「你好」。 var_table中沒有「hello」。我希望這種情況是「var2」。我在你的代碼中沒有看到這將是怎麼回事? – elelias