SQL:从选择中排除某些条件

Posted

技术标签:

【中文标题】SQL:从选择中排除某些条件【英文标题】:SQL: exclude certain criteria from select 【发布时间】:2019-10-22 18:15:12 【问题描述】:

试图从查询中排除符合条件的一组值,但查询没有返回任何内容。

select *
from rpt_StockInventorySummary a
where a.[DepartmentId] ='P'
and not exists (
select *
from rpt_StockInventorySummary b
where b.Manufacturer = 'warrington'
and b.LowestGroupDescription = 'Boots, Leather, 14 Inch, Pro'
and b.Instock = 0
and b.barcode = a.barcode
)
order by a.SortOrder

编辑

我认为在 NOT EXISTS 中的查询末尾添加“and b.barcode = a.barcode”是缺少的。

【问题讨论】:

没有样本数据和预期结果,很难说。但是,如果它没有返回任何结果,则意味着 NOT EXISTS 是返回行,或者没有 DepartmentId 的值为 'P' 的行。 你需要你的第二个并且不存在吗?您能否使用额外的过滤条件将AND 子句添加到第一个选择中。您的第二个选择与您的第一个不相关,因此未使用。 我建议先查看NOT EXISTS,因为我怀疑如果您自己运行该查询,您将获得一个结果集。 EXISTS 没有引用别名为 arpt_StockInventorySummary 似乎也很奇怪。 NOT EXISTS 中的查询确实返回值,无论是否有 departmentId = 'p'。我只需要排除此查询中的值,但我不确定它为什么会导致不返回... 如果NOT EXISTS 查询没有返回任何行,则说明rpt_StockInventorySummary 表中没有行,其中DepartmentId 的值为'P' 【参考方案1】:

查询中缺少的是:

and b.barcode = a.barcode

将其添加到不存在的查询中就可以了。

【讨论】:

以上是关于SQL:从选择中排除某些条件的主要内容,如果未能解决你的问题,请参考以下文章

用于从 DAL 选择中排除某些值的查询或表达式

SQL - 在某些条件下选择查询的问题

Oracle SQL:从一个表中选择一个计数,从另一个表中使用子查询缩小选择范围

从运行总计 (SQL) 雪花中排除某些记录

SQL Server - 从其他表中排除记录

使用numpy选择排除某些索引的数组中最小值的索引