MS SQL协同检查空值

时间:2013-12-20 10:07:06

标签: sql-server-2008

我需要根据tbl_B中的A_Class字段从tbl_A中选择记录,如下所示

SELECT * FROM tbl_A
WHERE A_Class IN (SELECT A_Class FROM tbl_B)

但是,A_Class可能包含NULL值

我需要添加另一个条件

如果A_Class包含NULL值,则

WHERE A_Class IN (SELECT A_Class FROM tbl_B) OR A_Class IS NULL

如果没有空值,则检查NULL的条件需要忽略/删除

所以我的问题是,是否有可能使它成为单个查询?

2 个答案:

答案 0 :(得分:1)

如果A_Class中没有空白值(我的意思是''),您可以尝试使用此代码:

SELECT * FROM #tbl_A
WHERE exists
     (SELECT * FROM #tbl_B
     where isnull(#tbl_A.A_Class,'')=isnull(#tbl_B.A_Class,''))

如果存在空白值,您甚至可以使用isnull(#tbl_A.A_Class,'NULL')=isnull(#tbl_B.A_Class,'NULL'),其中键入的短语为“NULL”。

答案 1 :(得分:0)

如果要显示没有空值的所有记录: SELECT a.* FROM tbl_A a INNER JOIN tbl_B b ON a.A_Class = b.A_Class WHERE a.A_Class IS NOT NULL;

如果要显示tbl_A中没有空值的所有记录以及tbl_B中的所有记录: SELECT a.* FROM tbl_A a LEFT JOIN tbl_B b ON a.A_Class = b.A_Class WHERE a.A_Class IS NOT NULL;

如果要显示tbl_B中没有空值的所有记录以及tbl_A中的所有记录: SELECT a.* FROM tbl_A a RIGHT JOIN tbl_B b ON a.A_Class = b.A_Class WHERE b.A_Class IS NOT NULL;