Amazon redshift &引用;频谱嵌套查询错误“;红移误差

Amazon redshift &引用;频谱嵌套查询错误“;红移误差,amazon-redshift,amazon-redshift-spectrum,Amazon Redshift,Amazon Redshift Spectrum,在红移模式下运行此查询时: 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: Spectru

在红移模式下运行此查询时:

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]
  -----------------------------------------------
我不太确定这个错误是什么意思。我只加入了一个表,我不确定它指的是哪个“其他表”,而且我在网上找不到关于这个错误的很多信息

我注意到如果我将它从
左连接
更改为
连接
,错误就会消失,但我确实需要执行左连接

你知道我做错了什么吗?

提到:

如果子查询中的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;

我仍然会犯同样的错误。顺便说一下,这些表确实包含嵌套的列,但是我加入的
device\u id
列都是varchar。奇怪的是,我刚刚在一个有2个数组列的表上运行了与您类似的查询,我
左加入了它们的元素,没有看到任何错误。