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

求编写SQL语句查询从未售出商品的ID及描述(表连接与NULL问题)

从未售出商品的SQL查询方案

要列出从未售出的商品的itemid和itemdescription,你的原SQL思路方向是对的,但可能忽略了Sale表的作用——如果Sale_Item中的记录对应的订单是取消/无效状态,那这类商品其实不算真正售出,所以需要结合Sale表的有效订单来判断。

正确的SQL写法(基于有效订单判断)

使用NOT EXISTS子查询可以更精准地筛选出从未出现在有效订单中的商品:

SELECT item.itemid, item.itemdescription
FROM item
WHERE NOT EXISTS (
    SELECT 1
    FROM sale_item
    INNER JOIN sale ON sale_item.sale_id = sale.sale_id
    WHERE sale_item.item_id = item.itemid
      AND sale.status = '已完成' -- 替换为你实际业务中代表有效订单的状态值
);

原SQL的问题分析

如果你的业务中只要出现在Sale_Item里就算售出,那原SQL应该能生效,没得到正确结果可能是以下原因:

  • 字段名/表名大小写不匹配(部分数据库如PostgreSQL区分大小写)
  • Sale_Item中存在无效关联记录,需要结合Sale表过滤有效订单
  • 数据库中存在脏数据,比如Sale_Item的item_id为空值干扰判断

另一种写法(LEFT JOIN+过滤)

如果确认所有Sale_Item关联的都是有效订单,也可以调整原SQL确保字段匹配:

SELECT item.itemid, item.itemdescription
FROM item
LEFT JOIN sale_item ON item.itemid = sale_item.item_id
WHERE sale_item.item_id IS NULL;

注意检查item.itemid和sale_item.item_id的字段类型、拼写是否完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:17:00