【问题标题】:mysql duplicates search based on different column valuesmysql根据不同的列值重复搜索
【发布时间】:2016-05-06 16:27:30
【问题描述】:

我有两张桌子。第一个表有 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

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

谢谢。

【问题讨论】:

  • 首先展示你的尝试。

标签: mysql duplicates


【解决方案1】:

如果有一行具有相同的名称、地址但另一个 ID 和电话号码,则应选择所有行:

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

【讨论】:

  • 我试图通过 phpmyadmin 在有 79665 条记录的数据库表上运行此查询,但查询将永远加载。对于这个加载问题有什么想法吗?
  • 尝试在id,First_Name,District,State,Block,Village上添加索引
【解决方案2】:

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

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

观察你的桌子后。我建议将电话列放在不同的表中。所以你可以喜欢。每个用户可以有多个电话号码,这样就解决了查询的问题。

所以现在当您从表格中取出电话列时。您将自动拥有具有多个电话号码的不同用户行。每当您拉出用户时,只需使用 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'

希望对你有帮助

【讨论】:

  • Distinct 将为所有列提供不同的值。
  • 抱歉,表结构无法更改。
  • 为什么会这样?我想这个想法是做对然后简单地得到答案。看看这个w3schools.in/dbms/database-normalization,如果你改变主意。将来,如果您正在使用庞大的数据库。您将需要标准化技术
猜你喜欢
  • 2021-07-31
  • 1970-01-01
  • 2013-09-29
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2021-01-10
  • 1970-01-01
相关资源
最近更新 更多