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);

编辑:

我提出上述建议是因为它似乎是表达您想要的最清晰的方式。等效的 usingleft 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 回答