Sql 如何从数据库中选择与某个条件不匹配的行,除非它们与另一个条件匹配

Sql 如何从数据库中选择与某个条件不匹配的行,除非它们与另一个条件匹配,sql,Sql,我甚至不知道这个问题该怎么说。所以我将直接进入一个例子 我需要运行如下的SQL查询 SELECT * FROM MYTABLE WHERE id > 1000 AND name not like 'abc_%' UNLESS name like 'abc_def%' 因此,在结果中: 例如,“name”为“abc_zyxdef”或“abc_lmnop”的行将永远不会返回,而与id无关 如果id超过1000,“name”为“abc_defghij”或“abc_def123”的行将被返回

我甚至不知道这个问题该怎么说。所以我将直接进入一个例子

我需要运行如下的SQL查询

SELECT * FROM MYTABLE
WHERE id > 1000
AND name not like 'abc_%'
UNLESS name like 'abc_def%'
因此,在结果中:

  • 例如,“name”为“abc_zyxdef”或“abc_lmnop”的行将永远不会返回,而与id无关
  • 如果id超过1000,“name”为“abc_defghij”或“abc_def123”的行将被返回
  • 如果id超过1000,则返回“name”为其他值的行
这在一个声明中是可能的吗

谢谢

为什么不呢

SELECT * FROM MYTABLE
WHERE id > 1000
AND (name not like 'abc_%'
OR name like 'abc_def%')
为什么不是这个

SELECT * FROM MYTABLE
WHERE id > 1000
AND (name not like 'abc_%'
OR name like 'abc_def%')

就这么简单。谢谢你这么简单的帮助。感谢您的帮助基于其他答案下面的评论(现在已删除),我认为您应该修改您的问题以消除歧义。有些人可能会将此理解为“因此,name=abc_zyxwvuts的行将被排除,但abc_defghij和zyx_wvuts将仅在id超过1000时被包括”,这就是我所追求的。如果id为999,我不需要abc_defghij,但如果id为1001,我需要abc_defghij,但是如果name=abc_zyxwvuts且id为999,该怎么办?换句话说,无论名字是什么,id都必须超过1000吗?这是一项首要要求吗?你明白我的意思吗?我明白你的意思。我将根据另一个答案下面的评论编辑帖子(现在已删除),我认为你应该修改你的问题以消除歧义。有些人可能会将此理解为“因此,name=abc_zyxwvuts的行将被排除,但abc_defghij和zyx_wvuts将仅在id超过1000时被包括”,这就是我所追求的。如果id为999,我不需要abc_defghij,但如果id为1001,我需要abc_defghij,但是如果name=abc_zyxwvuts且id为999,该怎么办?换句话说,无论名字是什么,id都必须超过1000吗?这是一项首要要求吗?你明白我的意思吗?我明白你的意思。我会编辑这篇文章