MySQL:如何选择所有产品都已付款的购物车
我有两张类似的表格 如果我们有购物车表,如下图所示MySQL:如何选择所有产品都已付款的购物车,sql,select,Sql,Select,我有两张类似的表格 如果我们有购物车表,如下图所示 id date title --------------------- 1 2016 a 2 2015 b 3 2018 c 4 2019 dd 产品表如下所示 id cart_id status -------------------------- 1 2 paid 2 2
id date title
---------------------
1 2016 a
2 2015 b
3 2018 c
4 2019 dd
产品表如下所示
id cart_id status
--------------------------
1 2 paid
2 2 paid
3 1 paid
4 1 unpaid
5 1 paid
6 3 paid
7 3 paid
已支付所有产品的预期产量仅为:
cart_id status
-------------------
3 paid
2 paid
试试这个调整后的代码-
SELECT carts.id,'Paid' Status
FROM carts
INNER JOIN product on carts.id = product.cart_id
GROUP BY carts.id
HAVING COUNT(Status) = SUM(CASE WHEN status = 'Paid' THEN 1 ELSE 0 END)
这似乎是最简单的逻辑:
select p.cart_id, p.status
from product p
where p.status = 'paid';
您可以按购物车id分组,并使用HAVING子句应用列状态中没有“未付”值的条件:
我假设在“状态”列中,唯一可能的值是“已支付”和“未支付”,因此可以使用“已支付”状态作为第二列,而不是maxstatus状态。
或不存在:
select distinct p.cart_id, p.status
from product p
where not exists (
select 1 from product
where cart_id = p.cart_id and status = 'unpaid'
)
看。
结果:
我编辑表格以便更好地描述,我只需要一行,每一行中的每一辆车result@shohrehshiran我已根据澄清的要求调整了代码。
select distinct p.cart_id, p.status
from product p
where not exists (
select 1 from product
where cart_id = p.cart_id and status = 'unpaid'
)
| cart_id | status |
| ------- | ------ |
| 2 | paid |
| 3 | paid |