为MySQL表中的每个副本返回唯一行

时间:2012-11-14 22:06:51

标签: mysql duplicates

我对MySQL有点新鲜,我不确定如何做到这一点,或者它是否可能。

我有一张这样的表:

Table products
    id  |  model  |  alt_model
    --     -----     ---------
    1      abc          abc
    2      ab-c         abc
    3      a-bc         abc
    4      def          def
    5      ghi          ghi
    6      gh-i         ghi
    7      jk-l         jkl
    8      mno          mno
    9      m-n-o        mno
    10     mn-o         mno
    11     m-no         mno
    12     pqr          pqr
    13     stu          stu

我希望能够执行一个查询,该查询将导致alt_models相同的每个重复产品组合。每对重复项都是唯一的,切换它们的顺序不应该产生另一个结果,但结果应该在id1字段中具有较低的id

结果应如下所示:

id1  |  id2   |  model1  |  model2
---     ---      ------     ------
 1       2       abc        ab-c
 1       3       abc        a-bc
 2       3       ab-c       a-bc
 5       6       ghi        gh-i
 8       9       mno        m-n-o
 8       10      mno        mn-o
 8       11      mno        m-no
 9       10      m-n-o      mn-o
 9       11      m-n-o      m-no
 10      11      mn-o       m-no

这可能吗?

1 个答案:

答案 0 :(得分:2)

简单的自我加入应该这样做;

SELECT a.id id1, b.id id2, a.model model1, b.model model2
FROM products a
JOIN products b
  ON a.alt_model=b.alt_model           -- alt_model must match
 AND a.id < b.id                       -- and id1 is smaller
ORDER BY id1,id2;

SQLfiddle for testing here