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

これらの 2 つのスキャンを交差させて取得できますか?

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

で標準を実行することにより、効果的に「インターセクトインデックススキャン」(それが何であれ)を取得INTERSECTしますSELECT

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 に答える