0

试图解决这个问题: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 高级索引技术,如位图索引

4

1 回答 1

1

通过在您:INTERSECTSELECT

SELECT basketId FROM tbl_basket_item WHERE itemId = 2
INTERSECT
SELECT basketId FROM tbl_basket_item WHERE itemId = 4;
于 2015-09-07T11:01:30.203 回答