我的桌子看起来像这样:
|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无论如何都可行吗? 谢谢你的任何提示:)
答案 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?
的回答