AWS错误:无效操作:表名“?”指定不止一次;

时间:2018-11-29 01:32:00

标签: amazon-web-services sql-server-2012 amazon-redshift

下面的代码在SQL Server 2012中很好用,但是当我在AWS AWS Web服务中使用它时,会给我一个错误“亚马逊无效操作:表名“ #t”指定了多次;”

CREATE TABLE #t (store_id varchar(20),city varchar(20),[state] varchar(20));
INSERT INTO #t VALUES
('22', 'new', 'NY'),
('22', null, null),
('22', null, null),
('33', null, null),
('33', 'LA', 'CA')
;

SELECT DISTINCT store_id, city, [state] 
INTO #unique
FROM #t WHERE city IS NOT NULL;
;

UPDATE #t
SET city = #unique.city, [state] = #unique.[state]
FROM #unique
INNER JOIN #t
ON #unique.store_id = #t.store_id
WHERE #t.city IS NULL

有人知道为什么并修改我的代码吗?谢谢。

1 个答案:

答案 0 :(得分:1)

你在这里

UPDATE #t
SET city = #unique.city, [state] = #unique.[state]
FROM #unique
WHERE #unique.store_id = #t.store_id
AND #t.city IS NULL

Redshift不需要FROM子句中的目标表,但是如果需要指定它,则需要对其进行别名。

UPDATE #t
SET city = #unique.city, [state] = #unique.[state]
FROM #unique
JOIN #t t1
ON #unique.store_id = t1.store_id
WHERE t1.city IS NULL

从文档

If you need to include the target table of the UPDATE statement in the list, use an alias.

https://docs.aws.amazon.com/redshift/latest/dg/r_UPDATE.html