条件SQL加入

时间:2013-12-24 11:21:41

标签: sql sql-server join conditional

我必须创建一个查询,以验证列是否为空并使用它进行连接,但如果它为null,则必须加入另一列。

如果可能,必须是那样的

SELECT A FROM DBTEST

IF ( NOT B = NULL)
INNER JOIN DBTEST2.B = DBTEST.B
ELSE
INNER JOIN DBTEST2.C = DBTEST.B

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

这应该有效

SELECT A 
FROM DBTEST 
Inner join DBTEST2 
on DBTEST.B = case when DBTEST2.B is null then DBTEST2.C else DBTEST2.B end 

答案 1 :(得分:4)

SELECT a 
FROM   dbtest 
       JOIN dbtest2 
         ON dbtest.b = dbtest2.b 
UNION ALL 
SELECT a 
FROM   dbtest 
       JOIN dbtest2 
         ON dbtest.b = dbtest2.c 
WHERE  dbtest2.b IS NULL 

这可能比在连接条件中使用case表达式更好,因为优化器将能够选择适当的索引(如果存在),或者至少选择基于表结构的连接方法。

答案 2 :(得分:3)

SELECT a 
FROM   dbtest 
       INNER JOIN (SELECT Isnull(dbtest2.b, dbtest2.c) Col 
                   FROM   dbtest2)TT 
               ON TT.col = dbtest.b 

我认为这可以解决您的问题