首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Netezza中的嵌套查询中无法访问外部表

在Netezza中的嵌套查询中无法访问外部表
EN

Stack Overflow用户
提问于 2014-07-07 23:32:55
回答 1查看 982关注 0票数 2

在Netezza中,我尝试执行以下查询。我知道错误:

代码语言:javascript
复制
ERROR [HY000] ERROR:  (2) This form of correlated query is not supported - consider rewriting

以下是查询。它无法从代码A.path中识别B.path LIKE (A.path || '%') ESCAPE ''行中的外部表"A“。

还有其他方法来处理这个问题来使逻辑工作吗?

我猜想,由于Netezza是一个比Server或Oracle更新的DBMS,所以它不能处理这样的嵌套逻辑。

代码语言:javascript
复制
SELECT
    DISTINCT A.path,
    (
        SELECT
                COUNT(DISTINCT NUM)
            FROM
            B
                    JOIN F ON B.id = F.fed_id
        WHERE   
            B.path LIKE (A.path || '%') ESCAPE ''           
            AND 
            B.code IN ('c', 'C')
    ) as total_count

FROM
    A
    JOIN D ON D.path = A.path and D.code in ('c', 'C')
WHERE
    A.code IN ('c', 'C')

编辑:

如果IBM链接被破坏,下面是链接的注释。

sql.html?lang=en

相关子查询在中的应用

IBM Netezza既支持常规子查询,也支持相关子查询。每当Netezza遇到一个常规子查询时,它就会将子查询预先计算一次,作为SubQuery中的示例。当系统在WHERE限制中遇到相关子查询时,它会在内部将它们转换为等效的连接格式,如关联子查询中的第二个示例所示。

如果选择使用关联子查询,请记住以下对相关子查询的形式和位置的限制:

  • 可以在WHERE子句中使用关联子查询。您可以在inner join条件中使用关联子查询,并使用相等的联接条件运算符。
  • 只能以下列形式在混合关联表达式中使用关联子查询: (corr_columA,corr_columnB,.)= expr(local_columnX,local_columnY,.)
  • 不能在SET操作(UNIONINTERSECTEXCEPTMINUS)中使用关联子查询。
  • 不能在带有GROUP BYHAVING子句的聚合中使用关联子查询。
  • 不能在ORed子句或CASE/WHEN表达式中使用关联子查询。
  • 不能在IN列表中使用关联子查询。
  • 不能在SELECT列表中使用关联子查询。

注意:由于相关子查询可能会极大地影响查询性能,因此尽可能考虑使用联接替换它们,以获得更高效的代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-07 23:43:02

在不了解netezza的情况下,这个重写的标准SQL查询应该完成以下工作:

代码语言:javascript
复制
SELECT A.path, COUNT(DISTINCT NUM) AS total_count
FROM   A
JOIN   D ON D.path = A.path
        AND D.code IN ('c', 'C')
LEFT   JOIN B ON B.path LIKE (A.path || '%') ESCAPE ''
             AND B.code IN ('c', 'C')
LEFT   JOIN F ON B.id = F.fed_id
WHERE  A.code IN ('c', 'C')
GROUP  BY A.path;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24621551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档