首页 文章

Oracle子层次查询“start with” - where子句中的值

提问于
浏览
1

在给定的情景中,我们将几种成分混合到中间产品批次中 . 这些中间产品批次用于进一步的中间产品或成品批次 . 在成分和成品之间存在不同量的中间步骤 .

要查找给定成品批次中使用的所有批次,我想编写如下的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子句 .

1 回答

  • 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 */
    

    根据您的需要,您甚至可以在内部查询中设置限制条件,而不使用外部查询,但这取决于您希望如何限制结果集

相关问题