mysql - 仅将非重复项插入没有键的 MySQL 表中

标签 mysql sql

我在 MySQL 中有两个表,并且希望定期将新数据从一个表插入到另一个表中。举个例子:

create table src(n integer, m integer);
create table dst(n integer, m integer);

insert ignore into dst(n, m) select n, m from src;

但是,dst 上没有 key ,所以这不起作用!此外,我无法创建任何 key ,因为我们有时希望允许另一个进程创建重复项。

这就是我现在完成的方法;这似乎是一种黑客式的解决方法,我担心它的性能不高:

insert into dst(n, m)
select src.n, src.m
from src left outer join dst
on src.n = dst.n and src.m = dst.m
where dst.n is null and dst.m is null;

我在 dst 上创建了索引来帮助解决这个问题,但是左外连接看起来仍然太重量级。有没有更规范的方法来实现这一目标?

最佳答案

只要您有 (n, m) 索引,性能就应该是可以接受的。 除了你这样做的方式之外,你还可以这样做:

insert into dst(n, m)
select distinct src.n, src.m
from src 
where NOT EXISTS (select 1 from dst D2 where src.n = D2.n and src.m = D2.m)

关于mysql - 仅将非重复项插入没有键的 MySQL 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22922954/

相关文章:

PHP mb_convert_encoding 不适用于查询

php - 使用 PHP 和 mysql 的多个条件 GROUP BY 和 COUNT

sql - 按嵌套选择排序

mysql - 找出两个不同查询 SQL 的总数之间的差异

javascript - NodeJS Express Route 在渲染的路由中返回异步数据

sql - MySQL Select 语句 - 两个表,根据其他表的计数对一个表进行排序

java - 如何记录JOOQ执行的生成的sql

mysql - sql如何在同一个表中制作多个行的副本

mysql - 如何使用 mysql cmdline 获取受影响记录的数量,仅此而已?

PHP 进行无限查询