【问题标题】:How to eleminate duplicate records from mysql query如何从mysql查询中消除重复记录
【发布时间】:2014-04-04 07:38:17
【问题描述】:

我有一个应用程序,我必须在其中显示用户的活动。我面临一个关于重复条目/活动的问题。首先我描述了我的架构:

表:UserFriends

CREATE TABLE `testDb`.`UserFriends` (
  `Pk` INT NOT NULL AUTO_INCREMENT,
  `Userid` INT NULL,
  `Friendid` INT NULL,
  PRIMARY KEY (`Pk`));

表:用户活动

CREATE TABLE `testDb`.`UserActivities` (
  `Pk` INT NOT NULL AUTO_INCREMENT,
      `Userid` INT NULL,
  `Friendid` INT NULL,
  `ActivityType` TINYINT(1) NULL,
  PRIMARY KEY (`Pk`));

在表格中插入一些虚拟数据。

INSERT INTO UserFriends(Userid, friendid )
values (7,105), (7,92)  

INSERT INTO UserActivities(Userid, friendid )
values (92, 1054), (105,2014), (92,105) 

我在 UserFriends 表中有一个用户 (pk - 7) 和 2 个朋友(例如 id no(s) 105 和 92)。有一些活动是由用户(例如 7)及其朋友完成的。用户 92 已与用户 1054 成为好友,用户 105 已将用户 2014 添加为好友,用户 92 和用户 105 也成为好友。现在我必须向用户 7 展示他/她的活动。我创建了一个查询,该查询对用户本身以及所有朋友的所有活动都进行了罚款。这是查询:

select ua.pk activityid, 
    if(uf.Friendid = ua.userid, ua.userid, ua.Friendid) myfriend,       
    if(uf.Friendid = ua.Friendid, ua.Friendid, ua.Userid) friend_of_friend
from UserFriends uf 
inner join UserActivities ua on uf.Friendid = if(uf.Friendid = ua.userid, ua.userid, ua.Friendid)
where uf.userid = 7

我得到的结果如下:

activityid,   myfriend,   friend_of_friend
1,            92,         1054
2,            105,        2014
3,            105,        92
3,            92,         105

请仔细检查结果,由于加入活动 id 3 有重复记录。用户 7 有两个朋友(例如 92、105),所以它来了两次。我只想要一个记录。我不知道如何删除/消除这些记录。我的原始查询有 6-7 个表连接,activity 表有大约 600000 条记录,userfriend 表大约有 200000记录。所以我也必须考虑性能。 请任何人都可以帮助我解决这个问题。 谢谢。

【问题讨论】:

标签: mysql performance join inner-join outer-join


【解决方案1】:

尝试添加GROUP BY activityid

像这样:

    where uf.userid = 7
    GROUP BY activityid

【讨论】:

    【解决方案2】:

    你能检查一下这个查询吗

    select DISTINCT ua.pk activityid, 
        if(uf.Friendid = ua.userid, ua.userid, ua.Friendid) myfriend,       
        if(uf.Friendid = ua.Friendid, ua.Friendid, ua.Userid) friend_of_friend
    from UserFriends uf 
    inner join UserActivities ua on uf.Friendid = if(uf.Friendid = ua.userid, ua.userid, ua.Friendid)
    where uf.userid = 7
    

    我在ua.pk 之前使用了一个不同的关键字。

    参考:http://www.w3schools.com/sql/sql_distinct.asp

    【讨论】:

    • 感谢回复,我试过了,但在我的情况下不起作用
    猜你喜欢
    • 1970-01-01
    • 2021-07-12
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 2013-02-07
    • 2020-09-02
    • 1970-01-01
    相关资源
    最近更新 更多