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   |