如何在表格中查找重复的名称

10

我有一张表格,其中包含人名、地址和工作职称。有时名字会重复。如果两个人的姓名和地址相同,则只需保留一个记录。

Table: Data_Excel
Name: P_Name
Address: P_Address
City:  P_city

请参考以下链接: https://dev59.com/cHRB5IYBdhLWcg3wvpmc - Younes
那么,两个不同的人有相同的姓名和地址的可能性怎么办?比如一个兄弟会里有两个名叫约翰·史密斯的人?或者是一对取了中性名字的夫妇?这是你需要担心的事情吗? - Clockwork-Muse
2个回答

21

要查找重复项,您可以执行以下操作:

SELECT P_name,
  P_Address,
  P_city
FROM Data_Excel
GROUP BY P_Name,
  P_Address,
  P_city
HAVING COUNT(*) > 1;

为了去除重复项,你可以执行以下操作:

DELETE
FROM Data_Excel
WHERE rowid NOT IN (
    SELECT MIN(rowid)
    FROM Data_Excel
    GROUP BY P_Name,
      P_Address,
      P_city
    );

要在Person表中插入数据,您需要执行以下操作:

INSERT INTO Person(id,name)
SELECT (SELECT MAX(id)+1 FROM Person),P_Name 
FROM Data_Excel WHERE P_Name NOT IN (SELECT name FROM Person)

感谢您的迅速回复,现在如果我需要将Data_excel表中的ID和Name插入到Person表中,并进行检查:姓名应该只添加一次,不应该已经存在于person表中。 - Mouzzam Hussain
1
@user408437。我添加了一种简单的方法来实现这个。 - Filipe Silva
如果我不从Data_Excel删除重复值然后执行插入操作,而persons表中的ID又没有自动递增,那么我该如何获取最后一个ID并递增每个插入操作的ID值呢? - Mouzzam Hussain
谢谢,只是为了确认一下,此查询将从Data_excel中插入姓名到Person表中,如果已经存在一个姓名,那么“WHERE P_Name NOT IN (SELECT name FROM Person)” 将确保它尚未被插入? - Mouzzam Hussain
您能否在sqlfiddle中将两个表的结构完全放置,并分享链接? - Filipe Silva
显示剩余6条评论

2
SELECT P_Name,P_Address,count(*)
FROM Data_Excel
GROUP BY P_Name,P_Address
HAVING count(*) > 1;

这将为您提供具有相同 P_NameP_Address 的记录。

感谢您的迅速回复,现在如果我需要将Data_excel表中的ID和Name插入到Person表中,并进行检查:姓名应该只添加一次姓名不应该已经存在于person表中 - Mouzzam Hussain
你想先检查person表中是否存在这些姓名?如果不存在,则插入这些姓名,如果存在,则什么也不做。这是你想要的吗? - SajjadHashmi
没错,如果在Data_excel中有多个条目,我只输入一次名称。 - Mouzzam Hussain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接