테이블 B에도있는 테이블 A에서 일치하는 레코드를 가져와야합니다. 그러나 하나의 쿼리에서만이 작업을 수행 할 수 있는지 알 수 없습니다.
표 A
id | order_id | title
----------------------------------
1 | 1114 | Product 1
2 | 1115 | Product 1
3 | 1115 | Product 2
4 | 1116 | Product 1
5 | 1117 | Product 3
6 | 1118 | Product 4
7 | 1118 | Product 5
표 B
id | order_id | a_id | title
----------------------------------
1 | 2221 | 1 | Product 1
2 | 2222 | 2 | Product 1
3 | 2222 | 3 | Product 2
4 | 2223 | 7 | Product 5
이제 order_id
모든 제품이 테이블 B에도있는 테이블 A의 모든 값이 필요 합니다. 따라서 결과는 다음과 같습니다.
1114
1115
1116은 b.a_id
값 4
이 없기 때문에 실패 합니다. 1117은 b.a_id
값 5
이 없기 때문에 실패 합니다. 1118은 6
AND 7
가 모두 포함되어 있지 않기 때문에 실패합니다 .b.a_id
나는 시도했지만 INNER JOIN
이것도 반환 1118
됩니다. 나는 또한 LEFT JOIN
함께 시도했지만 WHERE b.a_id IS NULL
정반대입니다. 그래서 나는 시도 RIGHT JOIN
했지만 그것도 반환 1118
됩니다.
이 SQL Fiddle을 참조하십시오 .
내 목표가 무엇인지 명확히했기를 바라며 이것이 하나의 쿼리로 관리 될 수 있는지 궁금합니다.
완벽하지는 않지만 SQL Fiddle을 통해 기존 데이터에 대한 올바른 결과를 반환합니다. 이것을 시작점으로 사용할 수 있습니까?
SELECT a.order_id, count(distinct a.id) as aCount, count(distinct b.a_id) as bCount
FROM a
LEFT JOIN b ON a.id = b.a_id
GROUP BY a.order_id
HAVING aCount = bCount;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다