表结构如下:
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/,如需转载,请注明出处,否则将追究法律责任。