MySQL复杂的自我联接

MySQL复杂的自我联接

我有一张这样的桌子:

id | name
--------
1  | test
2  | test1
3  | test
4  | test1
5  | test2

我正在尝试编写一个查询,它将给出这样的结果
 test   |  test1 | test2
----------------------------
 1      |   2    |   5
 3      |   4    |

很明显只有三个名字,我想写查询,但我做不到。有人能帮我吗

最佳答案

好吧,只是为了安抚那些怀疑者。注意,我并不是认真地提倡将其作为一个解决方案,因为它只是没有很好的可伸缩性——并且使其可伸缩(坦率地说,通过准备好的语句和存储过程是很乏味的)。。。

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL PRIMARY KEY
,name VARCHAR(12) NOT NULL
);

INSERT INTO my_table VALUES
(1  ,'test'),
(2  ,'test1'),
(3  ,'test'),
(4  ,'test1'),
(5  ,'test2');


SELECT MAX(CASE WHEN name = 'test' THEN id END) 'test'
     , MAX(CASE WHEN name = 'test1' THEN id END) 'test1'
     , MAX(CASE WHEN name = 'test2' THEN id END) 'test2'
  FROM
     ( SELECT x.*
            , COUNT(*) rank
         FROM my_table x
         JOIN my_table y
           ON y.name = x.name
          AND y.id <= x.id
        GROUP
           BY id
     ) z GROUP BY rank;

+------+-------+-------+
| test | test1 | test2 |
+------+-------+-------+
|    1 |     2 |     5 |
|    3 |     4 |  NULL |
+------+-------+-------+

关于mysql - MySQL复杂的自我联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20269637/

10-15 23:47