**Schema (MySQL v5.7)** create table TEST ( parent varchar(100), child varchar(100), `order` int ) --- select * from TEST; | parent | child | order | | ------ | --------- | ----- | | A | APPLE | 1 | | A | BANANA | 2 | | A | TOMATO | 3 | | B | APPLE | 1 | | B | BANANA | 2 | | B | PINEAPPLE | 3 | | C | BANANA | 1 | | C | APPLE | 2 | | C | MELON | 3 | | D | APPLE | 1 | | D | PINEAPPLE | 2 | | D | PEAR | 3 | | E | APPLE | 1 | | E | MELON | 2 | | E | PEAR | 3 | ---
위 처럼 TEST 테이블이 있습니다.
order 컬럼 값이 1, child 값이 APPLE
order 컬럼 값이 2, child 값이 BANANA
위 두 조건을 모두 만족하는 parent 를 가져오고, order 값이 3인 child를 가져오려고 합니다.
즉, order 1, 2가 모두 APPLE, BANANA 인 A, B 를 가져오고
그 중 order 값이 3인 TOMATO 와 PINEAPPLE 이 리턴되야 합니다.
--- | child | | --------- | | TOMATO | | PINEAPPLE | ---
도움 주시면 감사하겠습니다 !
관련 dbfiddle 입니다.
WITH IN_DATA AS ( -- 조건 정의 영역 SELECT 'APPLE' AS child , 1 AS order_T UNION ALL SELECT 'BANANA' AS child , 2 AS order_T ) , SUB_Q AS ( -- 필요 PARENT 도출 영역 select T1.parent from TEST T1 INNER JOIN IN_DATA T2 ON T1.child = T2.child AND T1.order_T = T2.order_T GROUP BY parent HAVING COUNT(1) = (SELECT COUNT(1) FROM IN_DATA) ) SELECT T1.child FROM TEST T1 INNER JOIN SUB_Q T2 ON T1.parent = T2.parent WHERE T1.order_T = 3 ;
이게 원하는 결과인지는 잘 모르겠지만....
임의로 ORDER 컬럼을 ORDER_T로 변경했습니다.