为了这个问题,我已经创建了一个我想要实现的基本示例(也尝试在Doctrine中实现这一点,但我会先决定让它在mySQL中工作)
我有三个表products
,orderItems
和orders
。
products
表格有active
个标记,orderItems
表格是products
和orders
之间简单的多对多关系。
我建造的应用程序只需要允许:
我想在一个查询中完成所有这些操作。新订单很容易......
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表中且处于非活动状态的非活动产品?
答案 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)