SQL:使用带例外的通配符值删除

问题描述 投票:1回答:2

我正在尝试删除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。当子查询遵循=,!=,<,<=,>>,> =或子查询用作表达式时,不允许这样做。

任何帮助都很感激地收到了皮特

sql sql-server
2个回答
3
投票

只需重新排列where子句:

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

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%'

但是,我宁愿使用上面的查询而不是这个。

© www.soinside.com 2019 - 2024. All rights reserved.