0

まず、私が持っている Table1 と Table2 の交点を見つけるために

SELECT Id FROM Table1
INTERSECT
SELECT Id FROM Table2

また

SELECT Table1.Id
    FROM Table1
    INNER JOIN Table2 ON Table1.Id=Table2.Id

これを table3 に挿入します。

INSERT INTO Table3
SELECT Table1.Id
    FROM Table1
    INNER JOIN Table2 ON Table1.Id=Table2.Id

しかし、問題は、挿入しようとしている ID が既に Table3 にある可能性があることです (ID は主キーであるため、一意である必要があります)。

https://stackoverflow.com/a/5288322/1529630を読みました。次に、競合を避けるために Table3 の Id を Id_ に名前を変更しました。

SELECT DISTINCT Id
FROM Table1 cr LEFT JOIN Table3 c ON cr.Id = c.Id_
WHERE c.Id_ IS NULL

でも交わろうとすると…

SELECT Id FROM Table2

INTERSECT

SELECT DISTINCT Id
FROM Queue cr LEFT JOIN Excluded c ON cr.Id = c.Id_
WHERE c.Id_ IS NULL

...エラーが発生します。私が間違っていることは何ですか?それを行うより良い方法はありますか?

4

1 に答える 1

1

ID の一意性に問題がある場合は、次のようにしてみてください。

INSERT INTO Table3(id)
    SELECT Table1.Id
    FROM Table1 INNER JOIN
         Table2
         ON Table1.Id=Table2.Id
    where Table1.Id not in (select Id from Table3);

編集:

あなたが望むものを表現する最も明確な方法と思われるので、私は上記を提案しました. 同等の使用left outer joinはより良いパフォーマンスを発揮する可能性があります:

INSERT INTO Table3(id)
    SELECT Table1.Id
    FROM Table1 INNER JOIN
         Table2
         ON Table1.Id=Table2.Id left outer join
         Table3
         on Table1.id = Table3.id
    where Table3.id is null

INSERT OR IGNOREエラーを無視するために使用することもできます。

INSERT OR IGNORE INTO Table3(id)
    SELECT Table1.Id
    FROM Table1 INNER JOIN
         Table2
         ON Table1.Id=Table2.Id;
于 2013-07-13T20:01:26.557 に答える