仅选择非关联行具有特定值的顶级行

时间:2019-11-14 16:34:47

标签: mysql sql database oracle-sqldeveloper

我提取了大约1000行,将其中的项目分解为各个组成部分,我试图仅选择项目行的描述字段中都不包含删除单词的项目:

enter image description here

在这种情况下,我只想从表格中选择项目2和4。

我已经试过了,但就目前而言,我只能选择其中一个描述未包含单词的每个项目的一部分,但我仍然可以得到其余项目的详细信息,这是不正确的。

1 个答案:

答案 0 :(得分:2)

您可以使用not exists进行过滤:

select t.*
from mytable t
where not exists (
    select 1 
    from mytable t1
    where 
        t1.ItemNo = t.ItemNo 
        and 'Deleted' in (t1.ItemDescription, t1.PacketDescription, t1.ComponentDescription)
)

(ItemNo, ItemDescription, PacketDescription, ComponentDescription)上有一个索引,它应该具有良好的性能。

或者,在MySQL 8.0中,您可以做一个窗口求和:

select *
from (  
    select 
        t.*,
        sum('Deleted' in (ItemDescription, PacketDescription, ComponentDescription)
            over(partition by ItemNo) sm
    from mytable t
    )
) t
where sm = 0