SQL 查询错误(不支持具有跳过级关联的关联子查询)
SQL query error (correlated subquery with skip-level correlations is not supported )
我有一个以下 sql 查询 运行 在:
PostgreSQL 9.5.1,由 Visual C++ build 1800 编译,64 位
但不是在:
PostgreSQL 8.2.15(Greenplum 数据库 4.3.5.4 build 1)在 x86_64-unknown-linux-gnu 上,由 GCC gcc (GCC) 4.4.2
编译
SELECT id,
(SELECT AVG(dur)
FROM data t
WHERE t.id = t1.id AND
t.id IN (SELECT id
FROM data t2
WHERE t2.id = t1.id
ORDER BY dur
DESC LIMIT 10)) as avgdur
FROM data t1
WHERE t1.b<10000
ORDER BY avgdur
DESC LIMIT 1;
我收到以下错误:
错误:不支持具有跳过级关联的关联子查询 (subselect.c:394)
我应该如何修改查询?
你的问题出在WHERE t2.id = t1.id
。您可以在子查询中使用父级别的查询,但不能在更高级别使用。所以这里有 3 个级别:
- t1
- t
- t2
您可以使用 "t2 subquery" 中的 t(查询 t2 在 FROM 子句中的位置)并且可以在 "t subquery" 中使用 t1。但是您不能使用 "t2 subquery".
中的 t1
解决方法是使用 WHERE t2.id = t.id)) as avgdur
。
这里有一些信息:http://www.greenplumdba.com/correlated-subqueries-csqs-in-greenplum
在我看来,您只是想以不同的方式进行分组...
SELECT id, AVG(dur) as avgdur
FROM data t1
WHERE t1.b<10000
GROUP BY id
ORDER BY avgdur
DESC LIMIT 1;
Pivotal Query Optimizer(在 4.3.5 中可用)支持具有多级关联的查询。要启用 Pivotal 查询优化器,运行 以下命令。
设置优化器=开启;
我鼓励您升级到最新的 GPDB 版本 4.3.8,它有一些改进和错误修复。
如果有帮助请告诉我!
我有一个以下 sql 查询 运行 在:
PostgreSQL 9.5.1,由 Visual C++ build 1800 编译,64 位
但不是在:
PostgreSQL 8.2.15(Greenplum 数据库 4.3.5.4 build 1)在 x86_64-unknown-linux-gnu 上,由 GCC gcc (GCC) 4.4.2
编译SELECT id,
(SELECT AVG(dur)
FROM data t
WHERE t.id = t1.id AND
t.id IN (SELECT id
FROM data t2
WHERE t2.id = t1.id
ORDER BY dur
DESC LIMIT 10)) as avgdur
FROM data t1
WHERE t1.b<10000
ORDER BY avgdur
DESC LIMIT 1;
我收到以下错误: 错误:不支持具有跳过级关联的关联子查询 (subselect.c:394)
我应该如何修改查询?
你的问题出在WHERE t2.id = t1.id
。您可以在子查询中使用父级别的查询,但不能在更高级别使用。所以这里有 3 个级别:
- t1
- t
- t2
您可以使用 "t2 subquery" 中的 t(查询 t2 在 FROM 子句中的位置)并且可以在 "t subquery" 中使用 t1。但是您不能使用 "t2 subquery".
中的 t1解决方法是使用 WHERE t2.id = t.id)) as avgdur
。
这里有一些信息:http://www.greenplumdba.com/correlated-subqueries-csqs-in-greenplum
在我看来,您只是想以不同的方式进行分组...
SELECT id, AVG(dur) as avgdur
FROM data t1
WHERE t1.b<10000
GROUP BY id
ORDER BY avgdur
DESC LIMIT 1;
Pivotal Query Optimizer(在 4.3.5 中可用)支持具有多级关联的查询。要启用 Pivotal 查询优化器,运行 以下命令。
设置优化器=开启;
我鼓励您升级到最新的 GPDB 版本 4.3.8,它有一些改进和错误修复。
如果有帮助请告诉我!