如果其他行包含某些数据,我正试图弄清楚如何让查询返回某些行。
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一起工作。