我有以下表格:
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'
但这只会返回具有一些 项目已完成
的订单,而不是所有。
编辑:没有items
的order
也是有效结果。
最佳答案
试试这个:
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/