私は、多対多の関係を持つ単純なSQLリレーショナルモデルを持っています。ここ成分表は、私がobject2
のセットに共通するすべてのobject1
を知っていただきたいと思いコンポジションテーブルの交叉方法
___________________________ | object1_id | object2_id | |---------------------------|
です。私の基本的な気持ちは、この
SELECT c.object1_id FROM composition c WHERE c.object2_id = <given_id_1>
INTERSECT
SELECT c.object1_id FROM composition c WHERE c.object2_id = <given_id_2>
のような要求を行うことであると私は、セット内のN個のオブジェクト2を持っている場合、私はN INTERSECT
SELECT c.object1_id FROM composition c WHERE c.object2_id = <given_id_1>
INTERSECT
SELECT c.object1_id FROM composition c WHERE c.object2_id = <given_id_2>
...
INTERSECT
SELECT c.object1_id FROM composition c WHERE c.object2_id = <given_id_N>
をやるしかし、それは非常に最適化され見えません。手伝って頂けますか ?私は本当にSQLの専門家ではない。私はそれをするためにJOINを使うことができると思う。
サンプル
___________________________ | object1_id | object2_id | |---------------------------| | 10 | 1 | | 11 | 1 | | 10 | 2 | | 12 | 2 | | 10 | 3 | | 11 | 3 | | 13 | 3 |
例は
- {
object2_id
組} => - {1、2} => {10}
- {{
object1_id
期待} 1、3} => {10,11} - {1、2、3} => {10}
多くのお役に立てていただきありがとうございます。クエリの複雑さはO(N)と今はO(1)です(なぜなら、2つ以上のオブジェクトを交差させるからです)。もう一度ありがとうございました –