确定where子句中的哪个值不正确?

时间:2014-07-08 14:23:11

标签: sql-server tsql

我的SQL功夫不强。我想知道我是否可以识别WHERE子句的哪个值不正确。 所以说我执行以下SQL语句....

SELECT col1, col2, col3 FROM dbo.myTable WHERE col1 = 'ABC' and col2 = 123

我希望能够识别col1的值'ABC'不存在或者col2的值123不存在。 这将在一个查询中,因为我想尽可能避免两个查询。 我执行第一个,如果行存在,那么我执行第二个,如果没有行,那么我可以推导出col2是错误的。

SELECT col1, col2, col3 FROM dbo.myTable WHERE col1 = 'ABC' 
SELECT col1, col2, col3 FROM dbo.myTable WHERE col1 = 'ABC' and col2 = 123

我考虑过了

SELECT 1 as qRow, col1, col2, col3 FROM dbo.myTable WHERE col1 = 'ABC' 
UNION 
SELECT 2 as qRow, col1, col2, col3 FROM dbo.myTable WHERE col1 = 'ABC' and col2 = 123

并且基于qRow值,我可以确定表中缺少哪个值,但是现在想要有任何其他解决方案

5 个答案:

答案 0 :(得分:0)

如果你想找到col1不是ABC或col2不是123的地方,你可以这样做:

SELECT  col1 ,
        col2 ,
        col3
FROM    dbo.myTable
WHERE   col1 <> 'ABC'
        OR col2 <> 123

答案 1 :(得分:0)

你在寻找像

这样的东西吗?
SELECT col1, col2, col3,
CASE 
   WHEN col1 = 'ABC' and col2 = 123 THEN 'both_true'
   WHEN col1='ABC' THEN 'col1_true'
   ELSE 'col2_true'
END AS value_check

 FROM dbo.myTable WHERE col1 = 'ABC' or col2 = 123

答案 2 :(得分:0)

我想你可能会使用NOT EXISTS之类的

SELECT col1, col2, col3 
FROM dbo.myTable 
WHERE NOT EXISTS ( select 1 from dbo.myTable 
where col1 = 'ABC' or col2 = 123)

答案 3 :(得分:0)

如果您使用OR代替AND,则可以添加CASE语句以显示匹配列:

SELECT col1, col2, col3, 
       CASE WHEN col1 = 'ABC' THEN 'True' ELSE 'False' END as Col1Match,
       CASE WHEN col2 = '123' THEN 'True' ELSE 'False' END as Col2Match
FROM dbo.myTable 
WHERE col1 = 'ABC' OR col2 = 123

Sample SQL Fiddle

您将在示例小提琴中看到,仅在一个或两个项匹配的情况下返回行。

答案 4 :(得分:0)

SELECT col1, col2, col3, case when col1 <> 'ABC' then 'X' end as 'MissingCol1Abc',
case when col2 <> 123 then 'X' end as MissingCol2
FROM dbo.myTable 
WHERE col1 = 'ABC' OR col2 = 123

或者您的意思是您想知道列何时为空?

SELECT col1, col2, col3, case when is null col1 then 'X' end as 'MissingCol1Abc',
case when col2 is null then 'X' end as MissingCol2
FROM dbo.myTable 
WHERE col1 = 'ABC' OR col2 = 123