gpt4 book ai didi

jquery - Netezza 中的嵌套查询中无法访问外部表

转载 作者:行者123 更新时间:2023-12-01 04:08:10 24 4
gpt4 key购买 nike

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

ERROR [HY000] ERROR:  (2) This form of correlated query is not supported - consider rewriting

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

是否有另一种方法可以解决此问题以使逻辑正常工作?

我猜测,由于 Netezza 是比 SQL Server 或 Oracle 更新的 DBMS,它无法处理这样的嵌套逻辑。

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 链接损坏,以下是链接中的注释。

http://www-01.ibm.com/support/knowledgecenter/SSULQD_7.0.3/com.ibm.nz.dbu.doc/c_dbuser_correlated_subqueries_ntz_sql.html?lang=en

Netezza SQL 中的相关子查询

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

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

  • 您可以在 WHERE 子句中使用相关子查询。您可以在内连接条件中以及等连接条件运算符中使用相关子查询。
  • 您只能以以下形式在混合相关表达式中使用相关子查询:

    expr(corr_columnA, corr_columnB,...) = expr(local_columnX, local_columnY,...)

  • 您不能在 SET 操作(UNIONINTERSECTEXCEPTMINUS 中使用相关子查询>).

  • 您不能在带有 GROUP BYHAVING 子句的聚合中使用相关子查询。
  • 您不能在 ORed 子句或 CASE/WHEN 表达式中使用相关子查询。
  • 您不能在 IN 列表中使用相关子查询。
  • 您不能在 SELECT 列表中使用相关子查询。

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

最佳答案

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

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;

关于jquery - Netezza 中的嵌套查询中无法访问外部表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24621551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com