2014-10-17 88 views
0

我想要的結果是關於一個訂單的信息。當我的訂單有一些訂單項時,以下查詢工作正常,但只要它是空訂單,它就不會提供任何信息。例如我的orderid = 5,這個還沒有任何項目。我使用訂單項來計算訂單的總成本。如何在不存在訂單項時獲取我的信息?這是我的查詢:沒有訂單的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; 

TABLES
order ID, 用戶ID, 日期, 狀態, 僱員

orderitem 的OrderID, 的productid, 量, pricewhenordered

user ID,用戶名 , 密碼, 名字,姓氏 , 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

如果你不需要任何有關這些項目的更多信息(而且我的猜測是你不這樣做),那麼這是最好的到我的答案。 – 2014-10-17 14:42:21

+0

這就是我一直在尋找的東西。我不是很聰明,可以忽略主要查詢中無用的orderitem。 Thx的快速和良好的回覆:) – 2014-10-18 09:34:20

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

Thx爲答案。我打算在這個問題上回答喬的回答,但是感謝你的時間:) – 2014-10-18 09:35:24