MySQL GROUP BY FIND_IN_SET

时间:2016-12-08 22:48:35

标签: mysql sorting group-by

我的桌子看起来像这样:

|id | name | sport            |
|---|------|------------------|
|1  | john | kitesurf         |
|2  | mike | kitesurf         |
|3  | tobi | tennis, kitesurf |
|4  | mat  | surf, skate      |
|5  | bob  | tennis           |

如何通过看起来像这样的运动获得一个包含组的列表:

| sport     | name
|-----------|-------
| kitesurf  | john
| kitesurf  | mike
| kitesurf  | tobi
| tennis    | tobi
| tennis    | bob
| skate     | mat
| surf      | mat

使用MySQL无论如何都可行吗? 谢谢你的任何提示:)

1 个答案:

答案 0 :(得分:2)

您需要另一张表格列出每项不同的运动。

CREATE TABLE Sports ( sport VARCHAR(10) PRIMARY KEY );
INSERT INTO Sports (sport) VALUES ('kitesurf'), ('tennis'), ('skate'), ('surf');

然后你可以这样加入:

SELECT s.sport, n.name
FROM NoOneNamesTheirTableInSqlQuestions AS n
INNER JOIN Sports AS s ON FIND_IN_SET(s.sport, n.sport);

但这是一个效率低下的查询,因为FIND_IN_SET()无法使用索引。

另请参阅我对Is storing a delimited list in a database column really that bad?

的回答