mysql根据不同的列值重复搜索

时间:2016-05-05 10:21:26

标签: mysql duplicates

我有两张桌子。第一个表有id,名字,姓氏和电话号码列。第二张表有州,区,街区和村庄列。 id列具有唯一值。其他列可以具有重复值。

我想选择所有具有相同名字,姓氏,州,区,街区和村庄值但具有不同电话号码值的记录。

例如:

ID  First Name  Phone Number    District    State   Block   Village
1   Rajesh      9876543210       ABC        XYZ     GHI     PQR
2   Jim         7894561230       WXY        DEF     JKL     SDF
3   Jack        8745963210       EWQ        REW     YTR     POI
4   Rajesh      9856741230       ABC        XYZ     GHI     PQR
5   Jack        8745963210       EWQ        REW     YTR     POI

输出应该包括第1和第4条记录,不是第3和第5条记录,因为它们具有相同的电话号码。

我使用以下查询选择了具有相同电话号码的所有重复行:

SELECT b.phone_mobile, g.countID, b.id
FROM (
SELECT phone_mobile, COUNT( id ) AS countID
FROM contacts
GROUP BY phone_mobile                
HAVING COUNT( id ) >1
)g
INNER JOIN contacts b ON b.phone_mobile = g.phone_mobile

现在我没有得到如何选择具有相同名称和位置但电话号码不同的所有行。我需要帮助。

谢谢。

2 个答案:

答案 0 :(得分:1)

如果存在具有相同名称,地址但另一个ID和Phone_number的行,则应选择所有行:

SELECT *
FROM contacts c
JOIN address a on c.id=a.id
WHERE EXISTS
 (
  SELECT 1
    FROM contacts c1
    JOIN address a1 on c1.id=a1.id
    WHERE c1.ID<>c.id
          AND c1.Phone_Number<>c.Phone_Number
          AND c1.First_Name=c.First_Name
          AND a1.District=a.District
          AND a1.State=a.State
          AND a1.Block=a.Block
          AND a1.Village=a.Village
  )

SQLFiddle demo

答案 1 :(得分:0)

我有一个建议给你。有时候拥有正确的数据库架构是件好事。

我的意思是正确的。如果在制作数据库时使用规范化。您将不得不处理更简单的查询。

观察你的桌子后。我建议在另一个表中使用Phone列。所以你可能会喜欢。每个用户都可以拥有多个电话号码,这样做可以解决查询问题。

所以现在当你把电话栏从桌子上取下来的时候。自动您将拥有具有多个电话号码的不同用户行。每当你拉一个用户时,只需要一个where子句连接到电话号码表就可以了。您的用户拥有多个唯一的电话号码。

Select * from users U,phone P where U.id = P.user_id

或者

Select * from users U, phone P where U.id = P.user_id and U.firstname = 'john'

希望这有帮助