试图解决这个问题:Sql: 选择所有包含一组特定项目的篮子
换句话说,有一个表:
tbl_basket_item
--
basketId itemId
1 2
1 3
1 4
2 3
2 4
3 2
3 4
itemId已编入索引。
如果我对itemId=2执行扫描,我会得到:
SELECT basketId FROM tbl_basket_item WHERE itemId = 2
1
3
如果我对itemId=4执行扫描,我会得到:
SELECT basketId FROM tbl_basket_item WHERE itemId = 4
1
2
3
我现在可以将这两个扫描相交以获得:
SELECT basketId FROM tbl_basket WHERE
basketId IN (SELECT basketId FROM tbl_basket_item WHERE itemId = 2) AND
basketId IN (SELECT basketId FROM tbl_basket_item WHERE itemId = 4)
1
3
使用一些 PostgeSQL 高级索引技术,如位图索引?