여러 관계가있는 간단한 SQL 관계형 모델이 있습니다. 여기에 성분 표구성 테이블에서 교차를 수행하는 방법
___________________________ | object1_id | object2_id | |---------------------------|
내가 알고 싶습니다에게 모든 object2
의 집합에 공통적 인 object1
. 내 기본적인 느낌이
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의 object2이있는 경우, 나는 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 |
{object1_id
예상} 실시 예
- {
object2_id
세트} => - {1, 2} =>을 {10}
- { 1, 3} => {10, 11}
- {1, 2, 3} => {10}
많은 도움을 주셔서 감사합니다. 내 쿼리 복잡성 때문에 O (N)과 이제는 O (1) (왜냐하면 두 개 이상의 객체가 교차하기 때문입니다) 때문에 쿼리는 실제로 원하는대로 optmized됩니다. 다시 고마워요 –