求資料交集的問題

space6212發表於2019-06-18

表結構如下:

SQL> desc item_tag
Name Type Nullable Default Comments
------------------- ---------- -------- ------- --------
ITEM_TAG_ID NUMBER(18)
ITEM_TAG_SEQ_NUMBER NUMBER(16) 9999999
TAG_ID NUMBER(16)
CREATE_DATE DATE SYSDATE
ITEM_ID NUMBER(18)

其中:TAG_ID和ITEM_ID組合建立了一個唯一性索引

求交集的三種方法:


1、

select item_id from item_tag where tag_id = 23468
intersect
select item_id from item_tag where tag_id = 37484
intersect
select item_id from item_tag where tag_id = 37495
intersect
select item_id from item_tag where tag_id = 37223

2、

select it.item_id from Item_Tag it where tag_id=23468 and it.item_id in
(select it.item_id from Item_Tag it where tag_id=37484 and it.item_id in
(select it.item_id from Item_Tag it where tag_id=37495 and it.item_id in
(select it.item_id from Item_Tag it where tag_id=37223
)
)
)

3、

select it.item_id from Item_Tag it where it.tag_id in (23468,37484,37495,37223)
group by it.item_id having count(it.item_id)=4

三者效率上差不多,但第三種方法最簡潔,特別是在IN裡的列表項很多的時候。

但第三種方法只能用於ITEM_ID和TAG_ID組合是唯一的情況

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63702/,如需轉載,請註明出處,否則將追究法律責任。

相關文章