2

我对 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

这可能吗?

4

1 回答 1

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 在这里进行测试

于 2012-11-14T22:15:18.360 回答