根据单列值过滤数据

Filter Data based on values of single column

我有一个 table,其中包含以下数据。现在我只想 select GRP_ID 其 ITEM_NO 只是包裹类型。如果有些物品的 TTYPE 既是包裹又是卡车,那么结果不应该出现。

GRP_ID  ITEM_NO TTYPE
00001   12345   Parcel
00001   12346   Parcel
00001   12347   Parcel
00002   12348   Parcel
00002   12349   Parcel
00002   12349   Truck

因此,对于上述数据,只有 GRP_ID='00001' 应该会出现结果。我试过以下但我想一定有更好的方法:

select * from myitem where GRP_ID not in (
    SELECT GRP_ID FROM myitem where TTYPE='Truck'
);

请帮帮我。

首先,做一个解释计划,因为转换器可能取消了子查询的嵌套。在那种情况下,它不会像看起来那样效率低下,并且该查询将 运行 正常。但是,这里有一个语义更清晰的查询(可能比转换后的计划更好,也可能不更好):

select GRP_ID
from myitem
group by GRP_ID
having min(TTYPE) = max(TTYPE) and
       min(TTYPE) = 'Parcel';

这将确保每个组只有一种类型,并且一种类型是包裹。