繁体   English   中英

返回一个SQL查询,其中字段不包含特定文本

[英]Return a SQL query where field doesn't contain specific text

我将设置一个快速场景,然后提出一个问题:假设我有一个仓库数据库,其中包含以下字段:StorageBinID,StorageReceivedDT,StorageItem和StorageLocation。

由于单个存储仓中有多个项目,因此它们可能具有多个记录。 因此,我想做的是创建一个查询,该查询仅返回不包含特定项目(但不包含其余内容)的存储仓。 例如,假设我的仓库中有5000个存储箱,并且我知道在StorageItem字段中列出了一些没有“ ItemX”的箱。 我想返回该StorageBinID的简短列表,但不获取所有没有ItemX及其所有内容的垃圾箱的完整列表。 (我认为这排除了IN,LIKE和CONTAIN及其NOTS)

我现在的解决方法是运行两个查询,通常在StorageReceivedDT中。 第一个是带有日期的垃圾箱,第二个是包含ItemX的垃圾箱。 然后将两个.csv文件导入Excel,并使用ISNA(MATCH)公式比较两列。

通过查询可以做到吗? 非常感谢您的任何建议。

您可以使用having子句作为聚合查询来执行此操作。 只需计算每个bin中出现“ ItemX”的行数,然后选择计数为0的bin:

select StorageBinID
from table t
group by StorageBinID
having sum(case when StorageItem = "ItemX" then 1 else 0 end) = 0;

请注意,这只会返回其中包含某些项目的垃圾箱。 如果您有完全空的垃圾箱,它们将不会出现在结果中。 您没有提供足够的信息来处理这种情况(尽管我可以推测您具有解决此问题所需的StorageBins表)。

您使用哪种SQL? 根据您提供的信息,您可以使用:

select distinct StorageBinID
from table_name
where StorageBinID not in (
    select StorageBinID
    from table_name
    where StorageItem like '%ItemX%'
)

您必须用表名替换table_name。 如果只需要完全匹配(StorageItem恰好是“ ItemX”),则应替换条件

where StorageItem like '%ItemX%'

where StorageItem = 'ItemX'

另一种选择(应该更快):

select StorageBinID
from table_name
minus
select StorageBinID
from table_name
where StorageItem like '%ItemX%'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM