在给定的情景中,我们将几种成分混合到中间产品批次中。这些中间产品批次用于进一步的中间产品或成品批次。在成分和成品之间存在不同量的中间步骤。
要查找给定成品批次中使用的所有批次,我想编写如下的Oracle SQL:
SELECT
something
FROM (
SELECT
something_else
FROM DB_TABLE
START WITH DB_TABLE.OUTPUT = START_VALUE
CONNECT BY NOCYCLE PRIOR DB_TABLE.OUTPUT = DB_TABLE.INPUT
) QRY_NAME
WHERE START_VALUE = '1400929801'
我知道,上面这个例子不起作用,但它显示了我正在寻找的东西
所以,我需要在外部查询的where子句中定义start的值 - 但是不知道如何。
查询将嵌入到软件中,用户只能定义where子句。
答案 0 :(得分:0)
假设您出于某种原因需要在外部查询中使用起始值,您可以尝试以下操作:
SELECT
something
FROM (
SELECT
something_else, connect_by_root(DB_TABLE.INPUT) as root
FROM DB_TABLE
CONNECT BY NOCYCLE PRIOR DB_TABLE.INPUT = DB_TABLE.OUTPUT
) QRY_NAME
WHERE root = '1400929801'
它只是执行您的查询,添加一列以保留根值,以便您可以将其用作外部查询中的过滤器。
但是,如果您只需要外部查询来限制结果数量,则可以在内部查询中使用起始值,然后使用外部查询仅使用某些条件限制结果集;例如:
SELECT
something
FROM (
SELECT
something_else
FROM DB_TABLE
START WITH DB_TABLE.INPUT = '1400929801'
CONNECT BY NOCYCLE PRIOR DB_TABLE.INPUT = DB_TABLE.OUTPUT
) QRY_NAME
WHERE /* some condition */
根据您的需要,您甚至可以在内部查询中设置限制条件,而不使用外部查询,但这取决于 您希望如何限制结果集