작성
·
355
0
안녕하세요, 선생님.
하루에 한번은 질문을 드리는거 같은데 자세하게 답변주셔서 항상 감사드립니다.
-- 고객이 가장 최근에 주문한 주문 정보 추출
를 아래와 같이 풀어도 결과값은 같더라구요.
select * from nw.orders a
where order_date in (select max(b.order_date) from nw.orders b where b.customer_id =a.customer_id );
(아래는 예제 코드)
select * from nw.orders
where (customer_id, order_date) in (select customer_id, max(order_date) from nw.orders group by customer_id);
where...in 은 비상관쿼리의 다중행,
where existx (...)은 상관쿼리의 다중행
반환에 사용된다는 것을 배웠기 때문에 저렇게 하면 안되는 거 같은데 왜 안될까 궁금합니다.
답변 1
1
안녕하십니까,
질문은 얼마든지 괜찮습니다. 부담 가지지 마십시요 ^^
질문을 제대로 이해했는지 모르겠습니다.
in 연산자는 상관 서브 쿼리, 비상관 서브 쿼리에 다 사용 가능합니다. 뿐만 아니라, 단일행, 다중행 반환 모두 가능합니다. 다만 가능하다면 의미상의 명확화를 위해서 단일행의 경우 = 을 사용해 주면 좋습니다.
원하시는 답변이 아니면 다시 글 부탁드립니다.