如果某一行包含某些数据,则筛选出某些行



如果其他行包含某些数据,我正试图弄清楚如何让查询返回某些行。

SKU Bin
1234 A1
1234 NoBin
4567 NoBin
8997 输送机
6543 MLSTAGE
2101 A2
2101 输送机
select SKU
from T
group by SKU
having count(case when Bin not in ('NoBin', 'MLSTAGE', 'Conveyor') then 1 end) = 0

或等效(如果有空(:

having count(case when Bin in ('NoBin', 'MLSTAGE', 'Conveyor') then 1 end) = count(*)

您本质上想检查是否存在,因此EXISTS似乎是一个合乎逻辑的选择:

SELECT  *
FROM    YourTable T
WHERE   NOT EXISTS (
SELECT NULL
FROM   YourTable T2
WHERE  T2.Bin NOT IN ('NoBin', 'MLSTAGE', 'Conveyor')
AND T2.SKU = T.SKU
)
AND T.Bin IN ('NoBin', 'MLSTAGE', 'Conveyor') 

您可以使用不存在的

select * from mytable a
where not exists (
select 1 from mytable b
where a.sku = b.sku and b.bin not in
('NoBin', 'MLSTAGE', 'Conveyor'))

这是小提琴https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5c370c7766cfbbb9552bbd32cf5e03a

SELECT 
SKU 
FROM [SKU TEST]
WHERE SKU NOT IN 
(
SELECT SKU
FROM [SKU TEST]
WHERE BIN NOT IN ('NoBin', 'Conveyor', 'MLSTAGE')
)

内部查询用于构建一组SKU,这些SKU与您不想要的所有内容相关联,因此不在您的3个条件中。外部查询正在生成一个不在内部集合中的SKU列表,该列表应该提供您想要的SKU。我使用了基本的脚本,以确保它能与几乎任何RDBMS一起工作。

最新更新