繁体   English   中英

除了Table3中已经存在的条目之外,如何将Table1和Table2的交集插入到Table3中?

[英]How can I insert into Table3 the intersection of Table1 and Table2, except the entries that already exist in Table3?

首先,找到表1和表2的交集

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 然后,我在表3中将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

...我得到一个错误。 我做错了什么? 有更好的方法吗?

如果问题是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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM