微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“频谱嵌套查询错误” Redshift错误

如何解决“频谱嵌套查询错误” Redshift错误

当我在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 reference提到:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。