2010-08-10 4 views
1

테이블 조인에서 공백/null 데이터로 고유 값을 반환하는 방법이 있습니까? 아래 예제를 통해 설명하는 것이 가장 좋습니다.mysql 조인 쿼리에서 고유 레코드와 null 레코드를 반환하십시오.

표 "주문"

order_id | order_total 
1  | 10 
2  | 20 
3  | 50 

표 "order_items"

item_id | order_id | name  | qty_ordered | base_price | row_total 
1  | 1  | Product | 1   | 10   | 10 
2  | 2  | Product | 1   | 10   | 10 
3  | 2  | Product2 | 1   | 10   | 10 
4  | 3  | Product | 2   | 10   | 20 
5  | 3  | Product2 | 3   | 10   | 30 

나는 다음과 같습니다 결과 세트를 생산하기 위해 노력하고있어.

order_id | item_id | name  | qty_ordered | base_price | row_total | order_total 
1  | 1  | Product | 1   | 10   | 10  | 10 
2  | 2  | Product | 1   | 10   | 10  | 20 
null  | 3  | Product2 | 1   | 10   | 10  | null 
3  | 4  | Product | 2   | 10   | 20  | 50 
null  | 5  | Product2 | 3   | 10   | 30  | null 

주문 당 한 번만 order_id 및 order_total 만 원합니다. 이 일종의 조인/별개/하위 쿼리를 사용하여 가능하지만 내가 아는 아무것도 아는 지금까지 일한 것으로 보인다.

답변

1

사용 :

SELECT x.order_id, 
     x.item_id, 
     x.name, 
     x.qty_ordered, 
     x.base_price, 
     x.row_total, 
     x.order_total 
    FROM (SELECT CASE 
        WHEN @order = o.order_id THEN NULL 
        ELSE o.order_id 
       END AS order_id, 
       oi.item_id, 
       oi.name, 
       oi.qty_ordered, 
       oi.base_price, 
       oi.row_total, 
       o.order_total, 
       CASE 
        WHEN @order = o.order_id THEN NULL 
        ELSE o.order_total 
       END AS order_total, 
       @order := o.order_id 
      FROM ORDER_ITEMS oi 
      JOIN ORDERS o ON o.order_id = oi.order_id 
      JOIN (SELECT @order := -1) r 
     ORDER BY o.order_id, oi.item_id) x 
+0

당신은 항상 당신의 SQL 모습이 너무 아름답게, 내 코드를 정돈하는 라운드 당신이 필요합니다. –

+0

와우! 그 놀라운. 그리고 예, 그렇게 우아하게 그 종류의 외모를 간단하게 나타 냈습니다. 거의. 고마워요. – Bobby

0
SELECT * FROM order_items 
LEFT JOIN orders 
ON (
    order_items.order_id=orders.order_id 
AND 
    order_items.item_id=(
     SELECT MIN(item_id) 
     FROM order_items a 
     WHERE a.order_id=order_items.order_id 
    ) 
) 

중첩 된 쿼리는 항상 각 주문에 대해 동일한 MIN (item_id)을 반환하며이 항목에 대해서만 조인하기 때문에 이렇게해야합니다.

하지만 매우 추악한 SQL 조각입니다. 이러지 마.

관련 문제