没有订单的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;
答
显式说明联接和使用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
如果你不需要任何有关这些项目的更多信息(而且我的猜测是你不这样做),那么这是最好的到我的答案。 – 2014-10-17 14:42:21
这就是我一直在寻找的东西。我不是很聪明,可以忽略主要查询中无用的orderitem。 Thx的快速和良好的回复:) – 2014-10-18 09:34:20