Mysql如何选择具有这两个属性的所有订单

时间:2014-02-23 01:25:37

标签: mysql

我有一个带有ordernumber的表调用订单和另一个带有ordernumber和产品编号的表调用order_detail。

我试图查询:

Select a.* from orders as a join order_detail as b on a.ordernum = b.ordernum where b.prodnum ='Bike28B' or b.prodnum = 'ridinggloves' group by ordernum;

它会给出具有Bike28B的订单的结果,但不会给订单带有两个属性的结果。

1 个答案:

答案 0 :(得分:0)

你无意中偶然发现了mysql的古怪分组实现,它实现了非标准的东西。尝试列出

中的所有列
select a.*
from orders as a
join order_detail as b
  on a.ordernum = b.ordernum
  and b.prodnum in ('Bike28B', 'ridinggloves')
group by <list every column in order>
having count(*) = 2

having子句确保找到两个子行。

另请注意使用in (...)代替or,如果在该列上使用索引(如果存在),则会有更好的机会。我也将这个条件移到了join子句中,因为它是一个连接条件(虽然它可以在两个地方都有效)。