0

所以我需要弄清楚如何使用 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 中的实例。

4

2 回答 2

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
于 2017-06-22T11:39:01.817 回答
-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
于 2017-06-21T21:23:21.313 回答