You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

电商应用全商品页SQL查询:排除用户已加入购物车的商品

解决全商品页隐藏已加入购物车商品的SQL查询问题

针对你这个电商应用的需求,我来给你梳理两种高效且符合要求的SQL写法,都能返回你需要的Product类型数据,并且过滤掉当前认证用户已经加入购物车的商品:

方法一:LEFT JOIN + IS NULL 写法

这种写法通过左关联购物车表,筛选出没有对应购物车记录的商品,逻辑直观易懂:

SELECT p.id, p.name
FROM PRODUCT p
LEFT JOIN BASKET b 
  ON p.id = b.fk_product 
  AND b.fk_user = 3 -- 替换为当前已认证用户的动态ID
WHERE b.id IS NULL;

逻辑说明:

  • 左关联(LEFT JOIN)会保留PRODUCT表的所有商品记录,同时匹配当前用户的BASKET记录
  • 对于已经加入购物车的商品,会关联到对应的BASKET行;未加入的商品,BASKET相关字段会是NULL
  • 通过WHERE b.id IS NULL就能精准筛选出当前用户未加入购物车的商品

方法二:NOT EXISTS 子查询写法

这种写法更贴合需求的自然描述——"找出不存在于当前用户购物车的商品",可读性很强:

SELECT p.id, p.name
FROM PRODUCT p
WHERE NOT EXISTS (
    SELECT 1
    FROM BASKET b
    WHERE b.fk_product = p.id 
      AND b.fk_user = 3 -- 替换为当前已认证用户的动态ID
);

逻辑说明:

  • 子查询会检查当前商品是否存在于当前用户的购物车中
  • NOT EXISTS会直接排除那些在购物车中有记录的商品,返回剩下的未加入商品

验证示例

当认证用户ID为3时,上述两种查询都会返回:

+-------+--------+
| id    | name   |
+-------+--------+
| 2     | p2     |
+-------+--------+

完全符合你给出的需求场景。

注意:实际开发中不要硬写用户ID(比如示例中的3),要替换为从用户会话、认证Token中获取的动态用户ID哦。

内容的提问来源于stack exchange,提问作者Aytekin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:56:12