电商应用全商品页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
相关产品推荐
相关产品推荐

