PostgreSQL中如何获取未关联记录?附表结构与数据示例
查询客户ABC的全量商品价格记录(含未关联项)
要实现返回客户ABC(ID=1)对应的全部5条商品记录,不管price表中有没有建立关联,我们需要用左连接(LEFT JOIN)结合客户与商品的全组合来实现,具体步骤如下:
核心思路
我们需要先构建客户ABC与所有商品的完整配对(1个客户 × 5个商品 = 5条组合),再关联price表获取已设置的专属价格,未设置的则显示NULL(也可以按需用商品表的原始价格填充)。
实现SQL
SELECT c.id AS customer_id, c.customername, i.id AS item_id, i.product, i.price AS original_price, p.price AS customer_custom_price FROM customer c CROSS JOIN item i -- 生成当前客户与所有商品的全量组合 LEFT JOIN price p ON c.id = p.customerid AND i.id = p.itemid WHERE c.id = 1; -- 锁定目标客户ABC(ID=1)
结果说明
执行这条SQL后,你会得到刚好5条记录:
- 对于已在
price表中关联的商品(SHOES,itemID=3),customer_custom_price会显示设置的320 - 其他未关联的商品,
customer_custom_price会显示NULL
如果希望未设置专属价格时直接显示商品的原始价格,可以用COALESCE函数优化字段,修改后的字段如下:
COALESCE(p.price, i.price) AS final_price
这样未设置客户专属价格的商品,就会直接显示item表中的原始价格。
内容的提问来源于stack exchange,提问作者Agoeng Liu
相关产品推荐
相关产品推荐

