从mysql表中消除重复的值

时间:2018-10-03 15:16:02

标签: mysql left-join

我需要在项目的多个表之间创建有效的联接查询的问题。问题是我在运行查询时得到重复的值。如果需要sql dump,我愿意这样做

在这里 表1 :-(用户) user.user_id表是主表,在不同表中出现多次,而user.uname是主表,在不同表中出现多次(这不是像user_id这样的已定义主键) 1)updates.user_id_u是user.user_id的次要角色,可以多次发生 2)updates.account_name和updates.author仅次于user.uname,并且可以多次出现 3)group_posts.author_id仅次于user.user_id,并且可能发生多次 4)group_posts.author_gp是user.uname的次要角色,并且可以根据不同的用户出现多次。 5)user.user_id是voted_u.user_id_v(包含用于更新的喜欢和不喜欢的列的表)的主要元素,并且可以多次出现 6)voted_g_c.user_id_reply_g仅次于user.user_id,并且由于用户单击页面中的不同链接而发生多次。 7)voted_c.user_id_reply在user.user_id之后,并且可能发生多次,因为用户可能单击页面中的许多链接以获取更新表注释。

表2 :-( group_posts) group_posts.gp_id是主要的,而group_posts.pid也是组帖子注释的主要类型(这意味着对gp_id的注释并且可以多次出现) 1)group_posts.gname是groups.name的第二个,并且可以多次出现,因为它是组的名称。 2)voted_g_u.vote_4_gid(group_posts用户喜欢或不喜欢按钮单击的表)仅次于group_posts.g_id,并且可能会发生多次,因为用户可能会单击相同或不喜欢的按钮 3)group_posts.group_id是groups.g_id的附属元素,并且可能出现多次,因为许多用户可能在同一组中发帖。 4)group_posts.author_id在user.user_id之后,并且可以多次出现。

表3 :-(组) groups.g_id是主要的,仅出现一次,groups.name也是如此。 1)groups.creator仅次于user.uname,并且由于用户可能创建多个组,因此可以多次出现。

表4 :-(评论更新) comment_update.comment_id是主要的,仅发生一次。 1)comment_update.os_id(原始状态ID)仅次于update.update_id,并且可能会发生多次,因为用户可能会对同一更新发表评论。 2)comment_update.author_c与u.uname相关,并且可以多次出现 3)comment_update.user_id_c与user.user_id相关,并且可以多次出现

表4 :-(我想做的gmembers或group成员是我要获取同一组的用户并获取他们的group_updates) 1)gmembers.gname实际上是组名,是groups.name的第二名,可以多次出现 2)gmembers.mname是用户名或与user.uname相关,并且可以多次出现 3)gmembers.group_id是groups.g_id的附属元素,可以多次出现 4)gmembers.user_id_group在user.user_id之后,并且可以多次出现,因为可能是许多组的成员

表5 :-( voted_u和voted_c) 1)voted_u.vote_4_update_id是updates.update_id的次要元素,并且可能发生多次 2)voted_u.user_id_v是user.user_id的次要角色,并且对于同一voted_u.vote_4_update_id可以多次出现 3)voted_c.vote_4_reply_id在comment_update.comment_id之后,是次要的,并且可能发生多次 4)voted_c.user_id_reply仅次于user.user_id,并且可能发生多次 表6 :-( voted_g_u和voted_g_c) 像voted_u和votedd_c这样的voted_g_u和voted_g_c的主键都不会具有辅助值 1)voted_g_u.vote_4_gid仅次于group_posts.gp_id,并且可以发生多次。

查询:-

SELECT DISTINCT up.*
              , g.* 
              , cu.*
              , gm.*
              , gp.*
              , v_g.*
              , v_g_c.*
              , v_u.*
              , v_c.* 
              , u.uname
              , u.avatar
              , u.user_id 
           FROM group_posts as g 
           JOIN user u 
             ON u.user_id = g.author_id 
           LEFT 
           JOIN updates up 
             ON up.user_id_u = u.user_id 
           LEFT 
           JOIN groups gp 
             ON g.group_id = gp.g_id 
           LEFT 
           JOIN gmembers gm 
             ON gm.user_id_group = g.author_id 
           LEFT 
           JOIN comment_update cu 
             ON cu.os_id = up.update_id 
           LEFT 
           JOIN voted_g_u v_g 
             ON v_g.vote_4_gid = g.gp_id 
           LEFT 
           JOIN voted_g_c v_g_c 
             ON v_g_c.vote_4_reply_id = g.pid 
           LEFT 
           JOIN voted_u v_u   
             ON v_u.vote_4_update_id = up.update_id 
           LEFT 
           JOIN voted_c v_c 
             ON v_c.vote_4_reply_id = cu.comment_id 
          WHERE g.group_id = 25 
            AND u.user_id = 127 
          GROUP 
             BY up.update_id
              , g.gp_id 
          ORDER 
             BY u.user_id desc

如果您想最好地了解一对多关系,我会为您提供sql dump,并且欢迎您提出疑问。

编辑:- 我了解我很环保,需要学习很多知识,但是我正在寻找一种快速解决方案来完成该项目,因为学习如何进行查询需要一些时间。 这是SQL转储: http://rextester.com/KRWG51655

0 个答案:

没有答案