Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在包含空值和空值的两列上写入WHERE to equalize_Sql_Sql Server_Database_Sql Server 2008 R2_Qsqlquery - Fatal编程技术网

Sql 如何在包含空值和空值的两列上写入WHERE to equalize

Sql 如何在包含空值和空值的两列上写入WHERE to equalize,sql,sql-server,database,sql-server-2008-r2,qsqlquery,Sql,Sql Server,Database,Sql Server 2008 R2,Qsqlquery,给定了我的表结构,现在我需要编写一个查询来比较“STRVAL1和STRVAL2”和“BVAL1和BVAL2”,如果两者不相同,那么应该返回该行 预期结果 请使用下面的脚本获取数据 DECLARE @TAB TABLE (ID INT, STRVAL1 VARCHAR(8), STRVAL2 VARCHAR(8), BVAL1 BIT, BVAL2 BIT) INSERT INTO @TAB VALUES (1, NULL, NULL, NULL, NULL) ,

给定了我的表结构,现在我需要编写一个查询来比较“STRVAL1和STRVAL2”和“BVAL1和BVAL2”,如果两者不相同,那么应该返回该行

预期结果

请使用下面的脚本获取数据

DECLARE @TAB TABLE (ID INT, STRVAL1 VARCHAR(8), STRVAL2 VARCHAR(8), BVAL1 BIT, BVAL2 BIT)

    INSERT INTO @TAB VALUES 
      (1, NULL, NULL, NULL, NULL)
    , (2, '', NULL, NULL, NULL)
    , (3, '', '', NULL, NULL)
    , (4, 'VAL', 'VAL', NULL, NULL)
    , (5, 'VAL1', 'VAL2', NULL, NULL)
    , (6, NULL, NULL, 0, NULL)
    , (7, NULL, NULL, 0, 0)
    , (8, NULL, NULL, 1, 1)
    , (9, NULL, NULL, 1, 0)

    SELECT ID, STRVAL1, STRVAL2, BVAL1, BVAL2
    FROM @TAB

您可以只使用比较,尽管
NULL
s使这有点麻烦:

select t.*
from @tab t
where ((strval1 <> strval2) or
       (strval1 is null and strval2 is not null) or
       (strval1 is not null and strval2 is null)
      ) or
      ((bval1 <> bval2) or
       (bval1 is null and bval2 is not null) or
       (bval1 is not null and bval2 is null)
      );
选择t*
来自@tab t
其中((strval1-strval2)或
(strval1为空且strval2不为空)或
(strval1不为null,strval2为null)
)或
((bval1 bval2)或
(bval1为空,bval2不为空)或
(bval1不为空,bval2为空)
);

您将需要一组测试

select ... from ... where
(strval1 is null and strval2 is not null) or
(strval1 is not null and strval2 is null) or
(strval1 != strval2) or
(bval1 is null and bval2 is not null) or
(bval1 is not null and bval2 is null) or
(bval1 != bval2)

类似于使用ISNULL(字段“”)“”@Christopher-is正在考虑ISNULL和合并-但是如果非null端包含您的可选值怎么办-如果您合并到“N/A”,如果您合并到“N/A”,则会出错-另一个是位字段