所以我需要弄清楚如何从另一个表中插入一个表,其中where子句要求我访问我插入的表。我从我插入的表中尝试了一个别名,但我很快发现你不能这样做。基本上,我想要检查的是我插入表中的值与我插入的表中的特定字段匹配。这是我尝试过的:
INSERT INTO "USER"."TABLE1" AS A1
SELECT *
FROM "USER"."TABLE2" AS A2
WHERE A2."HIERARCHYLEVEL" = 2
AND A2."PARENT" = A1."INSTANCE"
显然,这无济于事。我已经尝试了其他几个问题,但他们也没有在任何地方。任何帮助将不胜感激。
编辑: 我想在这个表中添加行,而不是向表中添加列。这两个表具有完全相同的结构 - 实际上,我从table2中提取了table1中已有的数据。我在table1中所拥有的是一堆没有父母但只有一个实例的记录。我要添加的是所有在table2中具有父表的记录,它们与表1中的实例相同。
答案 0 :(得分:0)
目前插入时无法连接表格。使用从表中选择的子选择的解决方案是正确的。
只有使用UPDATE,UPSERT和MERGE才能对要更改的表进行别名。对于这些操作,它是有意义的,因为您需要匹配列,然后决定是否需要更新它或插入一些内容。在您的示例中,您匹配的table1中的行不相关,因为您不想更改它,因此从语句的角度来看,您在子选择中使用的表与您的子选择中使用的表相同并不相关你插入的那个。
作为替代方案,我可以建议您使用以下解决方案,这与您的解决方案相同:
INSERT INTO "user"."table1"
SELECT
A1."ROOT",
A1."INSTANCE",
A1."PARENT",
A1."HIERARCHYLEVEL"
FROM "user"."table2" AS A1
WHERE A1."INSTANCE" in (select "PARENT" from "user"."table1")
AND A2."HIERARCHYLEVEL" = 2
答案 1 :(得分:-1)
这给了我正在寻找的答案,虽然我确信有一种更简单 - 或更有效 - 的方法。
INSERT INTO "user"."table1"
SELECT
A1."ROOT",
A1."INSTANCE",
A1."PARENT",
A1."HIERARCHYLEVEL"
FROM "user"."table2" AS A1,
"user"."table1" AS A2
WHERE A1."INSTANCE" = A2."PARENT"
AND A2."HIERARCHYLEVEL" = 2