我必须创建一个查询,以验证列是否为空并使用它进行连接,但如果它为null,则必须加入另一列。
如果可能,必须是那样的
SELECT A FROM DBTEST
IF ( NOT B = NULL)
INNER JOIN DBTEST2.B = DBTEST.B
ELSE
INNER JOIN DBTEST2.C = DBTEST.B
有什么想法吗?
答案 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
我认为这可以解决您的问题