根据单列值过滤数据
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';
这将确保每个组只有一种类型,并且一种类型是包裹。
我有一个 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';
这将确保每个组只有一种类型,并且一种类型是包裹。