繁体   English   中英

通过内部查询获取SQL结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM