[英]Getting SQL results with inner query
我在使用SQL查询时遇到问题:
select
o.orderID,c.city
from
`order` o, `customer` c, `ordered_items` oi
where
o.FKCustomerID = c.customerID
and o.orderStatus = 'IN PROGRESS'
and o.orderID = oi.FKOrderID
and (select FKDepartmentID
from ordered_items
where orderedItemsID in (select orderedItemsID
from ordered_items
where FKOrderID = o.orderID)
and FKDepartmentID = 11)
order by
c.city asc
它给了我一个错误,说嵌套查询返回的内容多于一行。
我要使用的嵌套查询是这样的,
在表中的订单ID:819-DBD-EB8-0E7具有3个项目。 我想仅当所有订购的商品都在部门ID 11中时才能获得该订单。(FKDepartmentID = 11)
因此,该订单有3个项目,所有项目都在部门11中。因此应检索该订单。 如果该部门只有2个项目,则不应检索该项目。
如何使用SQL查询获取? 在我的查询中,除内部查询之外的其他部分都可以。
需要更正内部查询。
谢谢。
学习使用显式join
语法。 尽管这不能解决此问题,但可以在将来出现问题之前解决它。
您查询的解决方案是使用group by
。 然后计算不是 11的部门数-仅接受该计数为0的订单。
select o.orderID, c.city
from `order` o join
`customer` c
on o.FKCustomerID = c.customerID join
`ordered_items` oi
on o.orderID = oi.FKOrderID
where o.orderStatus = 'IN PROGRESS'
group by o.order_id, c.city
having sum(FKDepartmentID <> 11) = 0
order by c.city asc ;
注意:您的语法表明您正在使用MySQL。 更通用的having
子句是:
having sum(case when FKDepartmentID <> 11 then 1 else 0 end) = 0
and
(select FKDepartmentID from ordered_items where orderedItemsID in
(select orderedItemsID from ordered_items where FKOrderID=o.orderID)
and
FKDepartmentID=11)
order by c.city asc
此内部查询出现在您的where条件中,这实际上没有任何意义。 这是因为WHERE子句检查条件是否为true。 您正在使用此select子查询返回一个表,这毫无意义。 您可能想要执行以下操作:您想检查与部门11相对应的订单是否存在。 您可以使用sql中的EXISTS子句来做到这一点:
select o.orderID,c.city
from `order` o,`customer` c,`ordered_items` oi
where o.FKCustomerID=c.customerID
and
o.orderStatus='IN PROGRESS'
and
o.orderID=oi.FKOrderID
and
EXISTS (select orderedItemsID from ordered_items where FKOrderID=o.orderID and FKDepartmentID=11)
order by c.city asc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.