Mysql 从表中选择,其中列在字符串中包含多个逗号分隔的值

Mysql 从表中选择,其中列在字符串中包含多个逗号分隔的值,mysql,select,Mysql,Select,我有用户表 users -------------------------------- | user_id | name | hobbies_id | -------------------------------- | 1 | John | 1,5,8,12,21 | | ... 使用包含其他表中爱好id的业余爱好id列-业余爱好: hobbies ----------------------- | hobby_id | name | --------------

我有
用户

users
--------------------------------
| user_id | name | hobbies_id  |
--------------------------------
|    1    | John | 1,5,8,12,21 |
|   ...
使用包含其他表中爱好id的
业余爱好id
列-
业余爱好

hobbies
-----------------------
| hobby_id |   name   |
-----------------------
|    1     | painting |
|    2     |  movies  |
|   ...
|    8     | football |
|   ...
现在,我想从
users
表中选择
cabiods\u id
的用户,即1,8,21

因此,上表中的John符合矿山条件,应包含在输出中

如果可能的话,我想通过单个查询来完成它。 不管怎么说,我一开始就卡住了


从用户中选择*,其中???

此注释太长

通过添加一个每个名称和名称各一行的连接表来修复数据结构。以下是不在字符串中存储多个ID的一些原因:

  • 在关系代数中,列通常包含一个值
  • SQL有一个很好的列表数据结构。它被称为“表”,而不是“列”
  • 类型很重要。整数应存储为整数,而不是字符串
  • 应使用外键关系强制执行对其他表的引用。字符串中的事物列表不支持这些
  • 结果查询不必要地复杂

了解称为“连接表”的内容。

此注释太长

通过添加一个每个名称和名称各一行的连接表来修复数据结构。以下是不在字符串中存储多个ID的一些原因:

  • 在关系代数中,列通常包含一个值
  • SQL有一个很好的列表数据结构。它被称为“表”,而不是“列”
  • 类型很重要。整数应存储为整数,而不是字符串
  • 应使用外键关系强制执行对其他表的引用。字符串中的事物列表不支持这些
  • 结果查询不必要地复杂

了解一种叫做“连接表”的东西。

Hm。这就是我没有意识到的存在的解决方案。谢谢,我会了解更多的。但现在请检查我是否理解正确。假设我有两个id为1和2的
用户
,还有三个id为1,2,3的
爱好
。我的连接表应该如下所示:
关系id(int)、用户id(int)、爱好id(int)
。其中包含6行:第1行-
1,1,1
,第2行-
2,1,2
,第3行
3,1,3
,第4行-
4,2,1
,第5行-
5,2,2
,第6行
6,2,3
。我的想法正确吗?嗯。这是我没有意识到的存在的解决方案。谢谢,我会了解更多的。但现在请检查我是否理解正确。假设我有两个id为1和2的
用户
,还有三个id为1,2,3的
爱好
。我的连接表应该如下所示:
关系id(int)、用户id(int)、爱好id(int)
。其中包含6行:第1行-
1,1,1
,第2行-
2,1,2
,第3行
3,1,3
,第4行-
4,2,1
,第5行-
5,2,2
,第6行
6,2,3
。我的想法正确吗?