我有一个存储多个列的数据库,我正在尝试创建有效的SQL查询,该查询将根据所选列(1个或更多)输出所有可能的重复项。
所以例如,如果我的数据库有"名称" "姓" "电话"我希望能够通过名字和姓氏找到重复的内容。我想只输出数据库中的那些超过两次,所以正确的输出将是这样的:
John, Smith, 123456789
John, Smith, 987654321
John, Smith, 098546786
Peter, Donut, 234569087
Peter, Donut, 854567896
我正在寻找一些东西,但我发现的唯一类似的事情就像是
SELECT * FROM table GROUP BY name,surname HAVING COUNT(*)>1
只输出一个重复的出现(不是全部)。任何建议,以便我不必从数据库中选择所有项目并通过PHP进行?
答案 0 :(得分:1)
如果手机在重复项之间可以相同,只需在主要位置使用主键即可。
SELECT DISTINCT t.name, t.surname, t.phone FROM table t
LEFT OUTER JOIN table t2 ON t.name = t2.name AND t.surname = t2.surname AND t.phone <> t2.phone
WHERE t2.name IS NOT NULL
答案 1 :(得分:1)
SELECT ID, Name, LastName, Phone
FROM mytable T1, mytable T2
WHERE
T1.name = T2.name AND
T1.Phone = Phone AND
T1.LastName = T2.PLastName AND
T1.ID < T1.ID -- only use this line to leave 1 as unique
答案 2 :(得分:0)
这样的事情会起作用吗?
SELECT *
FROM table t1
INNER JOIN
(
SELECT name, surname
FROM table
GROUP BY name,surname
HAVING COUNT(*)>1) t2
ON t1.name = t2.name AND t1.surname = t2.surname