SQL:使用通配符值进行删除(带例外)

时间:2018-09-04 04:25:23

标签: sql sql-server

我正在尝试删除JobNumber像__10%(带有两个下划线)的行,但不是以CH10%或CG10%开头的值

这是删除良好数据的原始SQL。

DELETE  FROM @TaskMaster
WHERE   JobNumber LIKE '__10%'

这就是我所拥有的:

DELETE  FROM @TaskMaster
where (select JobNumber from @TaskMaster where JobNumber NOT LIKE 'CH10%' or JobNumber NOT LIKE 'CG10%' ) like '__10%'

但是得到错误

  

消息512,级别16,状态1,第140行子查询返回的错误大于1   值。当子查询遵循=,!=,<,<=,>>,> =或将子查询用作表达式时,不允许这样做。

非常感谢您的帮助 皮特

2 个答案:

答案 0 :(得分:3)

只需重新排列您的where子句:

DELETE  FROM @TaskMaster
where JobNumber NOT LIKE 'CH10%' 
and JobNumber NOT LIKE 'CG10%'   
and JobNumber like '__10%'

答案 1 :(得分:1)

要使用的正确查询是:

DELETE  FROM @TaskMaster
where JobNumber NOT LIKE 'CH10%' 
and JobNumber NOT LIKE'CG10%'   
and JobNumber LIKE'__10%'

您的查询由于语法错误而无法使用,任何子查询都应遵循以下格式:

SELECT column-names
FROM table-name1
WHERE value IN (SELECT column-name
                FROM table-name2 
                WHERE condition)

在您的情况下,您错过了父查询中value子句的where部分。如果您要修改现有查询,则将如下所示:

DELETE  FROM @TaskMaster
where JobNumber IN 
      (select JobNumber from @TaskMaster 
       where JobNumber NOT LIKE 'CH10%' OR
       JobNumber NOT LIKE 'CG10%') 
AND JobNumber LIKE '__10%'

但是,我还是更喜欢使用上面的查询,而不是这个。