테이블 t0, t1 이 있습니다.
SELECT * FROM t0
SELECT count(*) FROM t1 WHERE id = t1.id
위 두개의 쿼리를 하나의 쿼리로 어떻게 만들죠?
두개의 쿼리를 하나의 쿼리로 합치는 방법은 일반적으로 union 을 씁니다.
현재 쿼리 만으로는 union이 가능한지를 판단할 수 없습니다.
두번째 쿼리의 count(*) 프로젝션은 number 값을 던져주는 한개의 column만 가지기 때문입니다.
즉, t0 테이블의 스키마가 number 의 한개 column 으로 구현된다면 가능도 하겠지요.
문제는 질문의 답이 지금 답변드린 답이 아닐 듯싶습니다. 무엇을 질의 하려고 하는지는 이해못해서.
t0은 상품 테이블이고
t1은 주문목록 테이블입니다.
t0의 속성으로 product_id(PK), name, size, price가 있고
t1의 속성으로 seq(PK), product_id(FK), date가 있습니다.
원하는 결과는 상품 테이블의 상품정보와
주문목록 테이블에서 그 상품의 총 주문횟수를
구하려고 하는겁니다.
해답을 아시면 답변 부탁드립니다.
주문된 제품마다의 주문숫자라면..
group by 를 쓰셔야 할듯 싶습니다..
select product_id, count(*) from t1 group by 1 order by 2 desc;
하시면 원하시는 것이 될듯..
이렇게 해보시죠
select t0.product_id,name,size,price,cnt
from t0
left join
(select product_id,count(*) as cnt
from t1
group by product_id) as t1
using (product_id)
;
문제를 푸는 방법은 outer join을 사용하는 방법입니다.
황치영님의 쿼리가 깔끔하네요.
노파심에서 (^.^) 한마디.
저런 문제라면,
제품 번호가 많아지면 많아질수록 무지막지한 시간이 소요될 것입니다.
그래서, 일반적으로 저런 쿼리가 빈번히 사용될 것이라면, t0 테이블에서 주문횟수를 기록해 두는 방식을 택합니다. 그리고, 그 주문횟수의 숫자 변환은 t1테이블에서 insert, update,delete 될 때 증감 하도록 트리거로 걸어두면, 깔끔하게 풀리겠지요.
경험상 PK, FK 형태의 테이블에서 상태값(통계값)이 필요한 경우는 대부분 트리거형태로 움직이는 것이 제일 안전합니다.