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

Oracle SQL开发需求:查找Item2缺失的Item1已配置仓库记录

问题描述

需编写Oracle环境下的SQL语句,在同一张表中对比Item1和Item2的仓库配置,找出Item2未配置但Item1已配置的仓库记录,要求结果中Item列显示为Item2。

现有表数据

WarehouseItem
AlabamaItem1
ArizonaItem1
CaliforniaItem1
ColoradoItem1
GeorgiaItem1
IllinoisItem1
MaineItem1
MontanaItem1
TexasItem1
AlabamaItem2
ArizonaItem2
ColoradoItem2
IllinoisItem2
TexasItem2

期望输出

WarehouseItem
CaliforniaItem2
GeorgiaItem2
MaineItem2
MontanaItem2

自行编写的错误SQL

SELECT
  t1.Item, t1.Warehouse
FROM table t1
WHERE t1.Item = 'Item1'
and NOT EXISTS (SELECT 1 
                    FROM table t2
                   WHERE t2.Item1 <> t1.Item2
                     AND t2.Warehouse = t1.Warehouse
                     and t2.Item = ('Item2'));
正确SQL语句

原SQL的问题是引用了表中不存在的t2.Item1和t1.Item2字段,表中仅存在Item字段。以下是两种可行的正确写法:

方法1:NOT EXISTS 实现

先筛选Item1的所有仓库,再判断这些仓库没有对应Item2的记录,最后将Item字段固定为'Item2':

SELECT
  'Item2' AS Item,
  t1.Warehouse
FROM your_table t1
WHERE t1.Item = 'Item1'
AND NOT EXISTS (
    SELECT 1 
    FROM your_table t2
    WHERE t2.Warehouse = t1.Warehouse
      AND t2.Item = 'Item2'
);

方法2:LEFT JOIN 实现

通过左连接关联Item1和Item2的仓库记录,筛选出Item2匹配为空的结果:

SELECT
  'Item2' AS Item,
  t1.Warehouse
FROM your_table t1
LEFT JOIN your_table t2
  ON t1.Warehouse = t2.Warehouse
  AND t2.Item = 'Item2'
WHERE t1.Item = 'Item1'
  AND t2.Warehouse IS NULL;

注意:请将SQL中的your_table替换为你的实际表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:18:12