【问题标题】:How to use rank to get rid of duplicate id?如何使用排名来摆脱重复的 id?
【发布时间】:2020-10-09 23:02:27
【问题描述】:

我有以下两张表:

id  | age  | sex  | key  | sport
293   22     m      a     soccer
987   25     f      b     track
501   27     m      c     swimming 
293   22     m      a     soccer
098   31     f      d     soccer
501   27     m      c     swimming
501   27     m      c     swimming
...

key | name 
a     ed
b     meg
c     ben 
a     ed
d     jenny
c     ben
c     ben
....

我不想要任何重复的 ID 行。 我想要这样的东西:

id  | Name | age  | sex  | key  | sport
293   ed      22     m      a     soccer
987   meg     25     f      b     track
501   ben     27     m      c     swimming 
098   jen     31     f      d     soccer

我写了一个查询,但它没有删除重复的 ID 行。 我也尝试过 distinct 和 group by 方法,但它仍然不会删除重复的 ID。

我试过了:

SELECT DISTINCT tb1.id, tb1.age, tb2.name, tb1.sport
FROM table1 
INNER JOIN tb2 ON tb1.key = tb2.key

我做错了什么?我尝试了 distinct 和 group by 方法,但仍然给我重复。

【问题讨论】:

  • 您的查询应该适用于此示例数据。您的数据或查询可能与此处显示的不完全相同。
  • 我想你可能有空白或尾随空格的问题?

标签: sql distinct ranking distinct-values ranking-functions


【解决方案1】:

重复ID的原因是您的第二个表中的行也是重复的。 所以你只在第二张桌子上与众不同,像这样

SELECT tb1.id, tb1.age, tb2.name, tb1.sport
FROM table1 
INNER JOIN (SELECT DISTINCT key, name FROM tb2) AS t2 ON tb1.key = t2.key

【讨论】:

    【解决方案2】:

    选择 DISTINCT tb1.id、tb1.age、tb2.name、tb1.sport 来自表 1

    此子句将选择这 4 列的不同组合,而不仅仅是不同的 id。

    从上表: 它会将以下两行视为不同的:-

       a   22   ed   soccer
       a   22   ed  (if any other sport ed plays)
    

    我发现了一个可能对您有帮助的类似帖子: SELECT DISTINCT on one column, with multiple columns in mysql

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    相关资源
    最近更新 更多