将外部选择行变量传递给oracle中的内部选择

Posted

技术标签:

【中文标题】将外部选择行变量传递给oracle中的内部选择【英文标题】:pass an outer selects row variable to inner select in oracle 【发布时间】:2012-06-06 21:18:19 【问题描述】:

如何在 oracle 中将外部选择行变量传递给内部选择,这是一个示例查询(其他外部连接已被删除。此查询将在应用程序的生命周期内加载 1 次)。此查询有效

select  l5.HIERARCHY_ID,
    (select wm_concat(isbn) isbns from (
        select  op.isbn from oproduct op
        LEFT JOIN  assignment ha on  op.r.reference = ha.reference
        where ha.hierarchy_id =  '100589'))isbns 
from level l5 where l5.gid = '1007500000078694'

但是当我更改内部选择的 where 子句时

where ha.hierarchy_id =  '100589'))isbns 
to
where ha.hierarchy_id =  l5.HIERARCHY_ID))isbns  

我收到以下错误 ORA-00904: "L5"."HIERARCHY_ID": 标识符无效

【问题讨论】:

【参考方案1】:

您不能传递第二级 SELECT 的值。

例如-

SELECT value1  -- 1st level select
FROM (
      SELECT value2  -- 2nd level select
      FROM ( 
            SELECT value3  -- 3rd level select.

您可以将第一级SELECT 中的值仅用于第二级SELECT。 同样,第二级SELECT 中的值仅对第一级SELECT 可用,第三级SELECT 不能超出此范围。

【讨论】:

不是反过来吗? value2 在第一级选择中可用 这是对这种情况的正确答案,surajz 最终删除了它工作的原因之一【参考方案2】:

我做了类似的事情来解决这个问题。有一个不必要的选择

select  
  l5.HIERARCHY_ID,
  (
    select  
      wm_concat(op.isbn) 
    from 
      oproduct op
      LEFT JOIN assignment ha on op.r.reference = ha.reference
    where ha.hierarchy_id =  l5.HIERARCHY_ID
  ) ISBNS
from 
  level l5 
where 
  l5.gid = '1007500000078694'

【讨论】:

【参考方案3】:

我认为我正确地阅读了您的 SQL - 当层次结构 id 匹配时您想要外部联接?

SELECT
    l5.hierarchy_id,
    op.isbns
FROM
    LEVEL l5
    LEFT OUTER JOIN
        (SELECT 
            wm_concat (op.isbn) isbns,
            ha.hierarch_id
        FROM
            oproduct op
            LEFT JOIN
                assignment ha
            ON op.reference = ha.reference) op
    ON l5.gid = op.hierarchy_id

【讨论】:

以上是关于将外部选择行变量传递给oracle中的内部选择的主要内容,如果未能解决你的问题,请参考以下文章

cmd命令行提示不是内部或外部命令怎么办

将 HTML 选择传递给 PHP 变量

将变量向量传递给 lm() 公式

通过直接数据库请求中的表示变量传递多个值

提示IMP不是内部命令

将变量传递给 :contains() 选择器、pyquery/cssselect、错误