2014-10-17 3 views
0

원하는 결과는 한 주문에 대한 정보입니다. 내 주문에 일부 주문 항목이있는 경우 folowing 쿼리가 제대로 작동하지만 빈 주문 인 경우 아무 정보도 제공하지 않습니다. 예를 들어 내 orderid = 5이고이 항목에는 아직 항목이 없습니다. orderitem을 사용하여 주문의 총 비용을 계산합니다. 주문 정보가 없을 때 어떻게 내 정보를 얻습니까? 이것은 내 쿼리입니다 :orderitems가없는 SQL 순서는 결과를 제공하지 않습니다.

SELECT DISTINCT 
    u.firstname|| ' ' || u.lastname, 
    TO_CHAR(o.date,'DD-MON-YY HH24:mm'), 
    (SELECT SUM(oItem.amount * oItem.pricewhenordered) FROM ORDERITEM oItem WHERE 
    oItem.ORDERID=o.ID), 
    (case o.employeeid 
    when null then '-' 
    else (SELECT us.firstname|| ' ' || us.lastname FROM user us WHERE 
    id=o.employeeid) 
    END), 
    o.status 
FROM order o, orderitem oItem, user u 
WHERE o.userid = u.id 
AND o.id = oItem.orderid 
AND o.id = 5; 

테이블
order ID, 사용자 ID, 날짜, 상태, 직원 ID

orderitem 에 OrderID, 제품 ID, 양, 는 pricewhenordered

user ID, 사용자 이름, 비밀번호, FIRSTNAME, LASTNAME, usertypeid

답변

1

기본 쿼리에서 실제로 ORDERITEM (oitem) 테이블을 사용하고 있지 않습니다. 그냥 두지 마십시오 :

SELECT DISTINCT 
    u.firstname|| ' ' || u.lastname, 
    TO_CHAR(o.date,'DD-MON-YY HH24:mm'), 
    (SELECT SUM(oItem.amount * oItem.pricewhenordered) 
    FROM ORDERITEM oItem 
    WHERE oItem.ORDERID=o.ID), 
    (case o.employeeid 
     when null 
     then '-' 
     else (SELECT us.firstname|| ' ' || us.lastname 
       FROM user us 
       WHERE id=o.employeeid) 
     END), 
    o.status 
FROM 
    order o, user u 
WHERE 
    o.userid = u.id 
    AND o.id = 5; 
+0

당신이 항목에 대한 더 이상의 정보를 필요로하지 않는다면 (그리고 제 추측은 그렇지 않습니다) 그러면 이것은 바람직합니다 내 대답에. –

+0

이것이 내가 찾고 있었던 것이다. 메인 쿼리에서 쓸모없는 orderitem을 간과하는 것은 그리 똑똑하지 않습니다. Thx 빠르고 좋은 회신 :) –

1

에 가입하고 LEFT를 사용하여이 작업을해야 할 항목이없는 경우에 참여하여 약 명시된다.

SELECT DISTINCT 
    u.firstname|| ' ' || u.lastname, 
    TO_CHAR(o.date,'DD-MON-YY HH24:mm'), 
    (SELECT SUM(oItem.amount * oItem.pricewhenordered) FROM ORDERITEM oItem WHERE 
    oItem.ORDERID=o.ID), 
    (case o.employeeid 
    when null then '-' 
    else (SELECT us.firstname|| ' ' || us.lastname FROM user us WHERE 
    id=o.employeeid) 
    END), 
    o.status 
FROM order o 
LEFT OUTER JOIN orderitem oItem ON o.id = oItem.orderid 
INNER JOIN user u ON o.userid = u.id 
WHERE o.id = 5; 
+0

대답은 대답입니다. 나는 이것에 Joe의 대답과 함께 갈 것이지만, 시간 내 주셔서 감사합니다. –

관련 문제