문제 : https://programmers.co.kr/learn/courses/30/lessons/62284

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

▶ FROM 절에서 사용되는 서브쿼리

FROM 절에서 사용되는 서브쿼리를 인라인 뷰(inline view)라고 한다.

FROM 절에는 테이블 명이 오도록 되어 있다.

그런데 서브쿼리가 FROM절에 사용되면 뷰(View)처럼 결과가 동적으로 생성된 테이블로 사용할 수 있다.

임시적인 뷰이기 때문에 데이터베이스에 저장되지는 않는다.

또한, 인라인 뷰로 동적으로 생성된 테이블이어서 인라인 뷰의 컬럼은 자유롭게 참조가 가능하다.

(출처: https://snowple.tistory.com/360)

 

▶ SQL 코드

풀이 1: FROM절 서브쿼리 이용

SELECT A.cart_id 
FROM 
(SELECT cart_id FROM CART_PRODUCTS WHERE NAME='우유') as A, 
(SELECT cart_id FROM CART_PRODUCTS WHERE NAME='요거트') as B 
WHERE A.cart_id = B.cart_id

 

풀이 2: WHERE절에 그냥 NAME을 단순2개 비교하는 조건은 없기때문에, 서브쿼리로 id하나 구해준뒤 AND사용 
SELECT cart_id 
FROM CART_PRODUCTS 
WHERE cart_id in (SELECT cart_id FROM CART_PRODUCTS WHERE name='우유') 
        AND NAME='요거트' 
ORDER BY cart_id asc;

풀이 3: SELF JOIN
SELECT C.cart_id
FROM CART_PRODUCTS C, CART_PRODUCTS T
WHERE C.cart_id = T.cart_id
    AND (C.name='우유' AND T.name='요거트')
ORDER BY C.cart_id