在Netezza中,我尝试执行以下查询。我知道错误:
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,所以它不能处理这样的嵌套逻辑。
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链接被破坏,下面是链接的注释。
相关子查询在中的应用
IBM Netezza既支持常规子查询,也支持相关子查询。每当Netezza遇到一个常规子查询时,它就会将子查询预先计算一次,作为SubQuery中的示例。当系统在WHERE限制中遇到相关子查询时,它会在内部将它们转换为等效的连接格式,如关联子查询中的第二个示例所示。
如果选择使用关联子查询,请记住以下对相关子查询的形式和位置的限制:
WHERE子句中使用关联子查询。您可以在inner join条件中使用关联子查询,并使用相等的联接条件运算符。UNION、INTERSECT、EXCEPT和MINUS)中使用关联子查询。GROUP BY和HAVING子句的聚合中使用关联子查询。CASE/WHEN表达式中使用关联子查询。IN列表中使用关联子查询。SELECT列表中使用关联子查询。注意:由于相关子查询可能会极大地影响查询性能,因此尽可能考虑使用联接替换它们,以获得更高效的代码。
发布于 2014-07-07 23:43:02
在不了解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;https://stackoverflow.com/questions/24621551
复制相似问题