没有订单的sql订单没有给出结果

问题描述:

我想要的结果是关于一个订单的信息。当我的订单有一些订单项时,以下查询工作正常,但只要它是空订单,它就不会提供任何信息。例如我的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

你实际上并没有在你的主查询中使用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

显式说明联接和使用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