MySQL:获取表之间重复值的列表

MySQL:获取表之间重复值的列表,mysql,Mysql,我有两个包含地址数据的表。这是一个局部表示: 表1(主要数据): 和表2(二次数据): 我需要首先从表2中获得一个值列表,这些值被标记为表1中已经存在的插入(位),这样我就可以手动编辑数据并插入它们(这样它们就不会重复)。如何从表2(辅助数据)中获取已存在于表1(主数据)中的重复项列表?您可以使用获取表2上的重复行: SELECT * FROM table2 t2 WHERE EXISTS ( SELECT * FROM table1 WHERE t2.address = tab

我有两个包含地址数据的表。这是一个局部表示:

表1(主要数据):

和表2(二次数据):

我需要首先从表2中获得一个值列表,这些值被标记为表1中已经存在的插入(位),这样我就可以手动编辑数据并插入它们(这样它们就不会重复)。如何从表2(辅助数据)中获取已存在于表1(主数据)中的重复项列表?

您可以使用获取表2上的重复行:

SELECT * FROM table2 t2 WHERE EXISTS (
    SELECT * FROM table1
    WHERE t2.address = table1.address
        AND t2.city = table1.city
        AND t2.state = table1.state
);
您可以在这里找到一个工作示例:

插入
表2
表1
的数据,可以使用以下方法:

INSERT INTO table1 (address, city, state) 
SELECT address, city, state FROM table2 
WHERE NOT id IN (
    SELECT t2.id FROM table2 t2 WHERE EXISTS (
        SELECT * FROM table1
        WHERE t2.address = table1.address
            AND t2.city = table1.city
            AND t2.state = table1.state
    )
);
您可以使用获取表2上的重复行:

SELECT * FROM table2 t2 WHERE EXISTS (
    SELECT * FROM table1
    WHERE t2.address = table1.address
        AND t2.city = table1.city
        AND t2.state = table1.state
);
您可以在这里找到一个工作示例:

插入
表2
表1
的数据,可以使用以下方法:

INSERT INTO table1 (address, city, state) 
SELECT address, city, state FROM table2 
WHERE NOT id IN (
    SELECT t2.id FROM table2 t2 WHERE EXISTS (
        SELECT * FROM table1
        WHERE t2.address = table1.address
            AND t2.city = table1.city
            AND t2.state = table1.state
    )
);

使用GROUPBY子句执行SELECT。假设name是要在其中查找重复项的列:

SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;

这将返回一个结果,第一列中有name值,第二列中有该值出现的次数计数。

使用GROUP BY子句执行SELECT。假设name是要在其中查找重复项的列:

SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;

这将返回一个结果,其名称值在第一列中,并计算该值在第二列中出现的次数。

您可以使用insert select和not in subselect

insert into table1 (address , city , state)
select address, city,  state
from table2 
where  (address , city , state) not  in (select address, city,  state from table1)

您可以将插入选择与不在子选择中一起使用

insert into table1 (address , city , state)
select address, city,  state
from table2 
where  (address , city , state) not  in (select address, city,  state from table1)

如果您想要不重复的值

insert into  table1 select * from table2 where 
row(id,address,city,state) not in (select * from table1);
insert into table1 select * from table2 where 
row(id,address,city,state) in (select * from table1);

如果需要重复的值

insert into  table1 select * from table2 where 
row(id,address,city,state) not in (select * from table1);
insert into table1 select * from table2 where 
row(id,address,city,state) in (select * from table1);

如果您想要不重复的值

insert into  table1 select * from table2 where 
row(id,address,city,state) not in (select * from table1);
insert into table1 select * from table2 where 
row(id,address,city,state) in (select * from table1);

如果需要重复的值

insert into  table1 select * from table2 where 
row(id,address,city,state) not in (select * from table1);
insert into table1 select * from table2 where 
row(id,address,city,state) in (select * from table1);


地址完全一样吗?或者它可能有一些不同的字符(在这种情况下,这将是非常困难的),它们正是sameUse
insert ignore而不是普通的
插入…
即使是两个表中的ID?豪尔赫-否ID不同地址完全相同吗?或者它可能有一些不同的字符(在这种情况下,这将是非常困难的),它们正是sameUse
insert ignore而不是普通的
插入…
甚至两个表中的ID都不一样?豪尔赫-不,ID是不同的,这不起作用,因为ID可能彼此不同。尽管OP说它完全相同。。。它可能有用。:)Jorge,你是对的-如果我这样做,它会返回一个地址列表,这些地址并不都是重复的(表1中不存在实际地址)。表之间的ID不同,但实际的地址数据是相同的,这将不起作用,因为ID可能彼此不同。尽管OP说它完全相同。。。它可能有用。:)Jorge,你是对的-如果我这样做,它会返回一个地址列表,这些地址并不都是重复的(表1中不存在实际地址)。表之间的ID不同,但实际地址数据相同您可能在
之后的
中缺少
。但是,如果这确实是答案,那么此主题是重复的,因此应该关闭。您可能在
之后的
中缺少
,而不是
。但是,如果这是真正的答案,那么这个主题是重复的,因此应该关闭。重复的内容不在一个表中。请把问题再读一遍。副本不在一张表内。请把问题再读一遍。