mysql - 如何选择所有项目完成的所有订单?

标签 mysql sql database

我有以下表格:

CREATE TABLE `orders` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `billing_profile_id` int(10) unsigned NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `currency` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
  `valid_until` timestamp NULL DEFAULT NULL
)

和:

CREATE TABLE `items` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `order_id` int(10) unsigned NOT NULL,
  `status` enum('pending','processing','completed','on-hold','cancelled'),
  `code` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `quantity` int(10) unsigned NOT NULL DEFAULT '1',
  `term` int(10) unsigned NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `discounts` int(10) unsigned NOT NULL,
  `total` int(10) unsigned NOT NULL
)

如何仅选择其所有状态为已完成订单

我试过这个:

SELECT o.* FROM 
FROM orders o INNER JOIN items i on o.id=i.order_id
GROUP BY o.id, i.status
HAVING i.status = 'completed'

但这只会返回具有一些 项目已完成 的订单,而不是所有

编辑:没有itemsorder 也是有效结果。

最佳答案

试试这个:

SELECT *
FROM   orders
WHERE  EXISTS (SELECT *
               FROM   items
               WHERE  orders.id = items.order_id
                 AND  items.status = 'completed')
  AND  NOT EXISTS (SELECT *
                   FROM   items
                   WHERE  orders.id = items.order_id
                     AND  items.status <> 'completed')

关于mysql - 如何选择所有项目完成的所有订单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49364265/

相关文章:

mysql - 用同一表mysql中另一列的数据替换一列数据

mysql - MySQL 中何时使用单引号、双引号和反引号

sql - 使用查询在 HP Vertica 中创建表的 SQL

java - 如何将Jsoup中的Element保存到数据库

mysql - Left Join ON LIKE 需要像 LIMIT 这样的东西

javascript - 从mysql获取数据并以另一种形式使用它

mysql - SQL查询以查找特定日期提出的问题数

php - #1054 - '***' 中的未知列 'field list'

使用 T-SQL 的 SQL Server 数据库分析

python - 如何从多个表中检索数据