给定一个产品和一个订单表。 我想要获得从未订购过或已订购但订单状态从未成功的产品。
要获取从未订购过的产品,我使用以下查询:
SELECT *
FROM products p
LEFT JOIN orders o ON p.product_id=o.product_id
WHERE order_id IS NULL
GROUP BY p.product_id;
我认为这个查询没问题。
要获取从未订购或已订购但 order_status 失败或中断的产品,我使用以下查询:
SELECT *
FROM products p
LEFT JOIN orders o ON p.product_id=o.product_id
WHERE (order_id IS NULL OR (order_id>0 AND (order_status=5 OR order_status=9))
GROUP BY p.product_id;
它没有给出我想要的,因为如果一种产品被订购两次,其中一次订单成功(order_status 为 4),一次订单失败(order_status 为 5),则给定的产品将出现在结果中。但我需要从未有过成功订单的产品。
最佳答案
使用子查询怎么样。
SELECT *
FROM products p
WHERE p.product_id NOT IN (
--This query returns all successfull orders
select product_id from orders where order_id > 0 and order_status = 4
)
关于mysql - 选择未订购或没有订单状态为成功的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56007111/