【问题标题】:mysql join with the same table without duplicatesmysql加入同一张表,不重复
【发布时间】:2013-03-04 13:12:17
【问题描述】:

我有一张表instructors,其结构/数据如下:

-----------------
|id  | name     |
-----------------
|1   | saad     |
|2   | imran    |
-----------------

我想在不返回重复结果的情况下对同一个表进行联接。

如果我做一个简单的连接,查询返回 4 行 [saad, saad], [saad, imran], [imran, imran], [imran, saad]

如果我添加一个 where 子句,它会返回 2 行 [saad, imran], [imran, saad]

但是,我只想返回 1 行,(即如果 [saad, imran] 已经返回,则查询不应返回 [imran, saad])。

到目前为止,这是我的查询:

SELECT DISTINCT
    i1.name AS name1,
    i2.name AS name2
FROM 
    instructors i1, instructors i2
WHERE
    i1.name != i2.name
ORDER BY
    name1, name2

【问题讨论】:

    标签: mysql join self-join


    【解决方案1】:

    试试:

    SELECT DISTINCT
        i1.name AS name1,
        i2.name AS name2
    FROM 
        instructors i1, instructors i2
    WHERE
        i1.name > i2.name
    ORDER BY
        name1, name2
    

    【讨论】:

      【解决方案2】:

      试试这个:

      SELECT DISTINCT
         i1.name AS name1,
         i2.name AS name2
      FROM 
         instructors i1, instructors i2
      WHERE
         i1.id < i2.id
      ORDER BY
         name1, name2
      

      【讨论】:

      • 谢谢,这适用于我的两行,但无论表中的行数如何,这都有效吗?
      • 太棒了,感谢您的帮助。我会尽快接受你的回答!
      猜你喜欢
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多