将外部选择行变量传递给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中的内部选择的主要内容,如果未能解决你的问题,请参考以下文章