【问题标题】:IN string MySQL输入字符串 MySQL
【发布时间】:2014-02-03 22:10:54
【问题描述】:

我的数据库中有这张表:

+----+-----------+
| ID |    JOB    |
+----+-----------+
|  1 | Developer |
|  2 | Designer  |
+----+-----------+

我想运行这个查询,通常会得到 ID : 2

select j.ID from jobs j where 'Designer' in ( j.JOBS ) 

不幸的是,当我喜欢这张桌子时它不起作用

+----+------------------------------------------+
| ID |                   JOB                    |
+----+------------------------------------------+
|  1 | Developer                                |
|  2 | Designer,administrator,analyst,Developer |
+----+------------------------------------------+

因为j.JOBS的值是字符串:'Designer,administrator,analyst,Developer'

不喜欢这样用逗号分隔的多重值:'Designer','administrator','analyst','Developer'

那么,我该如何解决这个问题,我希望我能很好地解释我的问题。谢谢

【问题讨论】:

  • 首先,不要在一个字段中存储多个值。规范化您的数据,并制作一个链接表。其次,如果您必须这样做,请使用FIND_IN_SET('Designer', j.JOBS)(参见:stackoverflow.com/questions/4155873/find-in-set-vs-in)。
  • Rocket Hazmaz 是对的。您应该有一个工作表(工作列中只有一个工作)、一个人员表和一个 people_job 连接表。
  • @RocketHazmat 谢谢。是的,我知道我必须在表之间使用链接,但就我而言,我必须将多个值存储在一个字段中。

标签: mysql sql


【解决方案1】:

将您的麻烦视为将值列表存储在单个列中的惩罚。您应该有一个单独的表,其中每个 id 一行,每个 job 一行。连续没有列表。关联表中每行只有一项。

不过,您的问题的答案是find_in_set()

select j.ID
from jobs j
where find_in_set('Designer', j.JOBS ) > 0;

【讨论】:

    【解决方案2】:

    也许你应该使用 LIKE 语句,比如WHERE j.JOBS LIKE "%Designer%"

    【讨论】:

      猜你喜欢
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      相关资源
      最近更新 更多