【问题标题】:How to remove duplicate rows from a join query in mysql如何从mysql中的连接查询中删除重复的行
【发布时间】:2013-03-25 13:50:48
【问题描述】:

我有一个包含 id 和 name 列的表

在我的表中存在 3 条记录

id       name 
1        Chinmoy
2        Amit
3        Bhagi

我想要结果

name1     name2 
Amit      Bhagi
Amit      Chinmoy
Bhagi     chinmoy

我尝试并成功了

name1    name2
Amit     Bhagi
Amit     Chinmoy
Bhagi    Amit
Bhagi    Chinmoy
Chinmoy  Amit
Chinmoy  Bhagi

通过使用此查询

select tbl1.name,tbl2.name from test tbl1 
join test tbl1 on tbl1.name != tbl2.name
order by tbl1.name,tbl2.name;

现在我不知道该怎么做。

我必须删除已经以相反顺序存在的记录。

请帮忙

提前致谢

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    基本上,您可以通过a.Name < b.Name从两个表的乘积中过滤结果

    SELECT  a.Name Name1, b.Name Name2
    FROM    TableName a, TableName b
    WHERE   a.Name < b.Name
    ORDER   BY Name1, Name2
    

    输出

    ╔═══════╦═════════╗
    ║ NAME1 ║  NAME2  ║
    ╠═══════╬═════════╣
    ║ Amit  ║ Bhagi   ║
    ║ Amit  ║ Chinmoy ║
    ║ Bhagi ║ Chinmoy ║
    ╚═══════╩═════════╝
    

    【讨论】:

    • 是的,它工作正常。你能向我解释一下 a.Name
    【解决方案2】:

    试试这个:

    select tbl1.name as n1, tbl2.name as n2 from test tbl1 
    join test tbl2
    on tbl1.name < tbl2.name
    order by tbl1.name, tbl2.name;
    

    解释

    您可以添加条件tbl1.name &lt; tbl2.name 以消除重复值。这样您就不需要已有的连接条件 (tbl1.name != tbl2.name)。因为当 a

    【讨论】:

    • @user1926138 你的例子给出了这个答案,满足了要求。 +1
    • @user1926138 它会给你完全相同的结果。试试看。
    • @tombom 感谢您的编辑,where 子句和 on 子句给出相同的结果我不确定哪个是更好的做法。
    • 您的join table where... 是一个被滥用的ANSI-SQL 标准。在使用JOIN 时,您有一个ON 子句,或者您构建一个像FROM table1 t1, table2 t2 WHERE t1.id = t2.id 这样的笛卡尔积。不要混合两种方式。但前一种,使用显式连接语法是首选。之所以引入它,是因为后者太容易出错并且难以阅读。
    • @user1926138 我添加了一个解释。希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多