我的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值,我可以确定表中缺少哪个值,但是现在想要有任何其他解决方案
答案 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
您将在示例小提琴中看到,仅在一个或两个项匹配的情况下返回行。
答案 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