2017-06-21 37 views
0

これで、挿入するテーブルにアクセスする必要があるwhere句を使用して、別のテーブルのテーブルに挿入する方法を理解する必要があります。私は挿入しているテーブルからエイリアスを試しましたが、私はすぐにそれを行うことができないことを知りました。基本的に、私がチェックしたいのは、テーブルに挿入している値が、挿入しているテーブル内の特定のフィールドと一致するということです。ここに私が試したことがあります:selectを挿入し、テーブルの値に応じてEDITEDに挿入

INSERT INTO "USER"."TABLE1" AS A1 
SELECT * 
FROM "USER"."TABLE2" AS A2 
WHERE A2."HIERARCHYLEVEL" = 2 
AND A2."PARENT" = A1."INSTANCE" 

明らかに、これは役に立たなかったです。私はいくつかの他のクエリを試してみましたが、彼らは私もどこにでもいませんでした。どんな助けでも大歓迎です。

EDIT: テーブルに列を追加するのではなく、このテーブルに行を追加します。 2つのテーブルはまったく同じ構造をしています - 実際、table2から既にtable1にあるデータを抽出しました。私がtable1に持っているものは、現在のところ、PARENTを持たないレコードの束ですが、インスタンスです。私が追加したいのは、テーブル1のインスタンスと等しいテーブル2の親を持つすべてのレコードです。

+0

は、なぜあなたはあなたが必要な行を検索するためにJOINを使用しないでください:

は別の方法として、私はあなたのものと同等であるあなたは、以下のソリューションを、提案することができますか? – danielsepulvedab

+0

サブクエリには、ある種のリンク/結合と制限が必要です。サブクエリが独自の(トップレベルのクエリとして)機能しない場合は、最初にそれを修正します。 – vwegert

+0

@danielsepulvedabお願いします...私は理解しているか分からない。 SELECT * FROM (TABLE1 INNER JOIN TABLE2 ON TABLE1.INSTANCE = TABLE2.PARENT)のようなことを言おうとしていますか? –

答えて

-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 
0

現在、挿入するときにテーブルに参加する方法はありません。表から選択した副選択を持つソリューションが正しいです。

変更したいテーブルのエイリアシングは、UPDATE、UPSERT、およびMERGEでのみ可能です。これらの操作では、列を一致させて、更新する必要があるかどうかを判断したり、代わりに何かを挿入したりする必要があるため、意味があります。あなたの例では、一致するtable1の行は関係がありません。変更したくないので、ステートメントの観点からは、あなたのsubselectで使用するテーブルは、そのテーブルと同じですあなたはに挿入します。

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 
関連する問題