鉴于这两个表,一个一对多的关系,从订单到的LineItem:如何查询两个不同的子行的父表?
Order
-----
Order_id (primary key)
LineItem
--------
LineItem_id (primary key)
Order_id (foreign key to Order)
price
productCode
我将如何找到订单与至少一个项目,表示价格= 10.00,并与PRODUCTCODE一个不同线项目= 12345?
鉴于这两个表,一个一对多的关系,从订单到的LineItem:如何查询两个不同的子行的父表?
Order
-----
Order_id (primary key)
LineItem
--------
LineItem_id (primary key)
Order_id (foreign key to Order)
price
productCode
我将如何找到订单与至少一个项目,表示价格= 10.00,并与PRODUCTCODE一个不同线项目= 12345?
既然你要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
感谢@Conrad Frix(我认为)为我在答案中原本没有的'distinct'。当我偷了它,其他答案被删除... –
我删除它,因为我喜欢'item2.lineitem_id!= item1.lineitem_id'比我的解决方案item1.productcode <> 12345' –
感谢一堆这样的反应快!我需要习惯不止一次加入同一张桌子的想法。 –
您可以使用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
不能保证第一个查询中的lineitem不会出现在第二个查询中。 –
我们似乎在答案中有一些解释差异。对我来说,这听起来像条件应该由价格= 10和产品代码= 12345,只要有一个产品代码= 12345的第二个项目是“不同”项目满足。 –
这是正确的。具有2个LineItem的订单甚至可以满足条件,_both_的价格= 10,productCode = 12345。 –