从表中选择WHERE列在字符串中包含多个逗号分隔值

时间:2016-01-17 13:50:56

标签: mysql select

我有users

users
--------------------------------
| user_id | name | hobbies_id  |
--------------------------------
|    1    | John | 1,5,8,12,21 |
|   ...

hobby_id列,其中包含其他表格中的爱好ID - hobbies

hobbies
-----------------------
| hobby_id |   name   |
-----------------------
|    1     | painting |
|    2     |  movies  |
|   ...
|    8     | football |
|   ...

现在我想选择users表中的用户hobbies_id,即 1,8,21

上面的te table中的 John 与我的情况相符,应该包含在输出中。

如果有可能我想通过单一查询来完成它。 无论如何我一开始就坚持了......

SELECT * FROM users WHERE ??

1 个答案:

答案 0 :(得分:0)

评论太长了。

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

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

了解一些名为“联结表”的内容。