查找具有MySQL的行,其中列的值为“n”和其他值

时间:2015-04-15 13:31:00

标签: mysql

考虑表orderorder_lineproduct

order_line包含order_id列和product_id

我想找到包含{_ 1}} 1和其他product_category的order_line的订单。 order_line结果的示例:

product_categories

必须存在第1类,以及其他类别。

我尝试了以下内容,但它没有帮助,这可能是我的逻辑错误:

 id | order_id | product_category
----+----------+-------------------
 6  |     5    |    1
 7  |     5    |    2

1 个答案:

答案 0 :(得分:0)

如果您想要其他类别以及“1”,请使用两个exists

SELECT ol.*
FROM order_line ol
WHERE EXISTS (select 1 from order_line ol2 where ol2.order_id = ol.order_id and product_category = 1) AND
      EXISTS (select 1 from order_line ol2 where ol2.order_id = ol.order_id and product_category <> 1) ;

这几乎是您的问题陈述的直接翻译。

注意:如果您只是想要具有此条件的订单,我会使用group by

select ol.order_id, group_concat(distinct product_category) as categories
from orderline ol
group by ol.order_id
having sum(product_category = 1) > 0 and
       sum(product_category <> 1) > 0;

但第一个版本提供了所有订单明细。