mySQL有很多条件

时间:2015-08-06 15:49:50

标签: mysql

为了这个问题,我已经创建了一个我想要实现的基本示例(也尝试在Doctrine中实现这一点,但我会先决定让它在mySQL中工作)

我有三个表productsorderItemsorders

products表格有active个标记,orderItems表格是productsorders之间简单的多对多关系。

我建造的应用程序只需要允许:

  • 新订单仅允许有效产品
  • 现有订单,以使用当前订单中的有效产品和/或任何非活动产品

我想在一个查询中完成所有这些操作。新订单很容易......

SELECT * FROM products WHERE active = true

获取订单的所有非活动产品...

SELECT p.* FROM products p
LEFT JOIN orderItems i ON i.productId = p.productId
WHERE i.orderId = 123 and p.active = false

我需要组合这两个查询,所以我从products表中检索所有处于活动状态和/或存在于orderItems表中且处于非活动状态的非活动产品?

2 个答案:

答案 0 :(得分:1)

使用UNION运算符可以合并两个查询:

SELECT p.* FROM products p WHERE p.active = true
UNION
SELECT p.* FROM products p
LEFT JOIN orderItems i ON i.productId = p.productId
WHERE i.orderId = 123 AND p.active = false

答案 1 :(得分:1)

您需要选择所有在orderItems中有条目的有效或无效产品:

SELECT * 
FROM products p
LEFT OUTER JOIN orderItems i ON i.productId = p.productId
WHERE active = true OR
      (p.active = false AND i.productId is not null)
相关问题