"Spectrum nested query error" 红移误差



当我在Redshift:中运行此查询时

select sd.device_id
from devices.s_devices sd
left join devices.c_devices cd
on sd.device_id = cd.device_id

我得到这样一个错误:

ERROR:  Spectrum nested query error
DETAIL:  
-----------------------------------------------
error:  Spectrum nested query error
code:      8001
context:   A subquery that refers to a nested table cannot refer to any other table.
query:     0
location:  nested_query_rewriter.cpp:726
process:   padbmaster [pid=6361]
-----------------------------------------------

我不太清楚这个错误是什么意思。我只加入了一张桌子,我不确定是哪一张;其他表格";它指的是,我在网上找不到关于这个错误的太多信息。

我注意到,如果我将其从left join更改为join,错误就会消失,但我确实需要进行左联接。

你知道我做错了什么吗?

Redshift参考提到:

如果子查询中的FROM子句引用嵌套表,则它不能引用任何其他表。

在您的示例中,您试图将两个嵌套列连接到一条语句中。

我会尝试先单独运行,然后再加入:

with 
s_dev as (select sd.device_id from devices.s_devices sd),
c_dev as (select cd.device_id from devices.c_devices cd)
select 
c_dev.device_id
from c_dev 
left join s_dev 
on s_dev.device_id = c_dev.device_id

对我有效的解决方案是用嵌套表的数据创建一个临时表,然后将临时表与我需要的其他表连接起来。

例如,如果嵌套表是spectrum.customers,则解决方案为:

DROP TABLE IF EXISTS temp_spectrum_customers;
CREATE TEMPORARY TABLE
temp_spectrum_customers AS
SELECT c.id, o.shipdate, c.customer_id
FROM spectrum.customers c,
c.orders o;
SELECT tc.id, tc.shipdate, tc.customer_id, d.delivery_carrier
FROM temp_spectrum_customers tc
LEFT OUTER JOIN orders_delivery d on tc.id = d.order_id;

最新更新