工单的递归SQL Oracle查询
全部, 我正在尝试创建具有两个输入的递归查询:工单的递归SQL Oracle查询,sql,oracle,subquery,recursive-query,Sql,Oracle,Subquery,Recursive Query,全部, 我正在尝试创建具有两个输入的递归查询: 项目编号 很多 我有三个工作子查询: 接收 批处理 配料 我发现可以在简单的SQL中实现这一点,例如查询: WITH RECURSIVE x2 (result) AS ( SELECT 1 UNION ALL SELECT result*2 FROM x2) SELECT * FROM x2 LIMIT 10; 当我使用2个输入ITEM_ID+LOT运行第一个子查询RECEIVING并返回一些行时,它的OK和SQ
WITH RECURSIVE x2 (result) AS (
SELECT 1
UNION ALL
SELECT result*2 FROM x2)
SELECT * FROM x2 LIMIT 10;
当我使用2个输入ITEM_ID+LOT运行第一个子查询RECEIVING并返回一些行时,它的OK和SQL应该停止。如果否,查询应开始在子查询批次中搜索批次号,该批次号用于第三个子查询配料,该子查询返回新的物料ID+批次,以便接收
例如:
输入
select
BATCH_ID,
BATCH_NO,
PRODUCT_ITEM_ID,
PRODUCT_ITEM
PRODUCT_LOT,
INGREDIENT_ITEM_ID,
INGREDIENT_ITEM
INGREDIENT_LOT,
LEVEL
FROM
(
SELECT
b.batch_id,
b.batch_no,
b.inventory_item_id as PRODUCT_ITEM_ID,
b.item as PRODUCT_ITEM,
b.lot as PRODUCT_LOT,
i.inventory_item_id AS INGREDIENT_ITEM_ID,
i.item as INGREDIENT_ITEM,
i.lot as INGREDIENT_LOT
FROM batch b
JOIN ingredients i
ON i.batch_id = b.batch_id
)
CONNECT BY NOCYCLE PRIOR
PRODUCT_ITEM_ID = INGREDIENT_ITEM_ID
AND PRODUCT_LOT = INGREDIENT_LOT
START WITH
PRODUCT_ITEM_ID = 1765716
AND PRODUCT_LOT = '1EP17171590'
;
您可以这样做,而无需递归:
ITEM_ID LOT
1736957 1FP17068674
我使用您在屏幕截图中提供的示例数据创建了用于此目的的表:
create table RECIEVING
(
ITEM_ID number,
LOT varchar2(50)
);
insert into RECIEVING
values(1736957,'1FP17068674');
create table BATCH
(
BATCH number,
ITEM_ID number,
LOT varchar2(50)
);
insert into BATCH
values(351908,1765716,'1EP17171590');
create table INGREDIENTS
(
BATCH number,
ITEM_ID number,
LOT varchar2(50)
);
insert into INGREDIENTS
values(351908,1736957,'1FP17068674');
这是我使用的查询:
select RECIEVING.ITEM_ID,
RECIEVING.LOT
from BATCH
join INGREDIENTS
on BATCH.BATCH = INGREDIENTS.BATCH
join RECIEVING
on RECIEVING.ITEM_ID = INGREDIENTS.ITEM_ID
and RECIEVING.LOT = INGREDIENTS.LOT
where BATCH.ITEM_ID = 1765716
and BATCH.LOT = '1EP17171590';
如果一个批次有多个成分,那么只要它存在于Receiving中,它就会返回超过1行。我不确定这是否符合你的要求
您提供的示例的输出如下所示:
ITEM_ID LOT
1736957 1FP17068674
请编辑您的问题,并为所涉及的表提供DDL以及DML和子查询等示例数据。递归是您所做工作的要求吗?我会重新评估你到底想做什么,然后问这个问题。听起来您正试图将标准SQL视为一种典型的面向对象编程语言,而不需要递归。我想从接收表中得到结果,请看最后一张图片以理解示例。