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

如何编写SQL实现用户与商品的交叉关联并匹配购物车购买信息?

解决方案

你的问题在于原SQL无法生成用户与商品的全量交叉组合——它只返回了用户有购物车记录的商品关联,漏掉了用户未购买的商品行。要实现全量组合并匹配购买状态,需要先生成所有用户和商品的笛卡尔积,再关联购物车数据。

正确SQL语句

SELECT
  p.name AS `product name`,
  u.name AS `user name`,
  pr.price AS `bought?`
FROM users u
CROSS JOIN products p
LEFT JOIN cart c ON u.id = c.user_id AND p.id = c.product_id
LEFT JOIN products pr ON c.product_id = pr.id
ORDER BY u.name, p.name;

逻辑说明

  1. CROSS JOIN users和products:生成所有用户与所有商品的全量组合(共3个用户×3个商品=9行),这是得到预期结果的基础。
  2. LEFT JOIN cart:根据用户ID和商品ID关联购物车表,保留所有全量组合行,购物车中存在的记录会匹配到数据,不存在的则为NULL。
  3. LEFT JOIN products:通过购物车中的商品ID关联商品表,获取对应价格;若购物车无匹配,价格字段自然为NULL,符合预期要求。
  4. ORDER BY:按用户名和商品名排序,与你给出的预期结果顺序一致。

执行结果

该语句会输出你预期的格式:

product nameuser namebought?
Amul Milkarunima10.00
Amul ButterarunimaNULL
Amul CheesearunimaNULL
Amul MilkrajivNULL
Amul ButterrajivNULL
Amul CheeserajivNULL
Amul Milktamaghna10.00
Amul ButtertamaghnaNULL
Amul Cheesetamaghna30.00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:07:48