mysql - 选择未订购或没有订单状态为成功的产品

标签 mysql

给定一个产品和一个订单表。 我想要获得从未订购过或已订购但订单状态从未成功的产品。

要获取从未订购过的产品,我使用以下查询:

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/

相关文章:

php - MySql 更新后找不到 mysql.infoschema

php - 准备语句失败但没有返回错误

php - 如何对使用 mysql 查询但使用 PHP usort 函数排序的项目进行分页?

php - 在 PHP 中访问关联数组时 undefined variable

php - 在文件循环中仅显示一次年份

php - Doctrine 查询中的多个 ->select()

php - 如何在数据库更新记录期间添加带有图像名称的日期

mysql - 记录从 phpmyadmin 发出的所有查询

MySQL克隆一个表,修剪一些数据,然后热交换它们的名称

php - 将网络表单保存到数据库