我有记录,我想根据某些条件过滤它们。当我添加第一个条件然后它可以工作,但是当我添加多个条件时,我没有得到预期的结果:
数据:
ScheduleID ScheduledStartDateTime Query
7857 2017-05-27 16:00:00.000 WHILE (1=1) BEGIN UPDATE TOP (3000) MainItemPOS SET Deleted = 1 WHERE MainItemID = 276044 AND ConceptID = 2120 AND 1 = Case WHEN Deleted <> 1 THEN 1 ELSE 0 END IF @@RowCount=0 BREAK; END
7856 2017-05-27 11:00:00.000 WHILE (1=1) BEGIN UPDATE TOP (3000) MainItemPOS SET Deleted = 0 WHERE MainItemID = 276045 AND ConceptID = 2120 AND 1 = Case WHEN Deleted <> 0 THEN 1 ELSE 0 END IF @@RowCount=0 BREAK; END
查询:这给了我这两行很好。
SELECT *
FROM ScheduledBulkUpdate(nolock) SBU
INNER JOIN ScheduledBulkUpdateRecurring(nolock) SBR ON SBR.BatchId = SBU.BatchId
WHERE
SBU.Query LIKE('% ConceptID = 2120 %')
现在我只想用MainItemID = 276044
进行记录,所以我使用这个查询然后我没有得到理想的结果。如果我使用OR
那么我也不会得到理想的结果。
SELECT *
FROM ScheduledBulkUpdate(nolock) SBU
INNER JOIN ScheduledBulkUpdateRecurring(nolock) SBR ON SBR.BatchId = SBU.BatchId
WHERE
SBU.Query LIKE('% ConceptID = 2120 %')
AND SBU.Query LIKE('% MainItemID = 276044 %')
我需要使用子查询吗?如果我在第一次查询中将我的条件更改为MainItemID = 276044 AND ConceptID = 2120
,那么它会起作用,但我对这种方法感到好奇。
答案 0 :(得分:0)
每当EQUALS或LIKE运算符未返回预期结果且操作的任何一侧都有空格时,我都会产生怀疑。空白区域可能看起来像屏幕上的空白字符,但它可以由您的软件压缩,可以是TAB字符,也可能包含不可见的字符。
使用Wild卡消除空白区域,或使用十六进制编辑器查看空白区域实际包含的内容,您将更深入地了解正在发生的事情。