2014-04-16 66 views
0

鉴于这两个表,一个一对多的关系,从订单到的LineItem:如何查询两个不同的子行的父表?

Order 
----- 
Order_id (primary key) 

LineItem 
-------- 
LineItem_id (primary key) 
Order_id (foreign key to Order) 
price 
productCode 

我将如何找到订单与至少一个项目,表示价格= 10.00,并与PRODUCTCODE一个不同线项目= 12345?

+0

我们似乎在答案中有一些解释差异。对我来说,这听起来像条件​​应该由价格= 10和产品代码= 12345,只要有一个产品代码= 12345的第二个项目是“不同”项目满足。 –

+0

这是正确的。具有2个LineItem的订单甚至可以满足条件,_both_的价格= 10,productCode = 12345。 –

回答

2

既然你要2名不同的项目,你需要加入lineitem表两次,并禁止他们具有相同的主键。

select distinct o.order_id 
from order o 
join lineitem item1 
    on item1.order_id = o.order_id 
join lineitem item2 
    on item2.order_id = o.order_id 
and item2.lineitem_id != item1.lineitem_id 
where item1.price = 10 
    and item2.productcode = 12345 
+0

感谢@Conrad Frix(我认为)为我在答案中原本没有的'distinct'。当我偷了它,其他答案被删除... –

+0

我删除它,因为我喜欢'item2.lineitem_id!= item1.lineitem_id'比我的解决方案item1.productcode <> 12345' –

+0

感谢一堆这样的反应快!我需要习惯不止一次加入同一张桌子的想法。 –

0

您可以使用UNION并组合这两个查询。因此,像这样(未经)

Select o.Order_id, l.price, l.productCode 
from Orders o 
join LineItem l 
    on l.Order_id = o.Order_id 
where l.price = 10 
union 
Select o.Order_id, l.price, l.productCode 
from Orders o 
join LineItem l 
    on l.Order_id = o.Order_id 
where l.productCode = 12345 
+0

不能保证第一个查询中的lineitem不会出现在第二个查询中。 –

相关问题