MySQL选择一个字段中的值与另一个表中的值匹配的行

时间:2011-09-27 07:14:54

标签: mysql

我有以下表格:

  • tbljobpost,包含字段job_id int,job_title varchar(50),skill_cat_id varchar(50)
  • tblappskills,包含字段app_control Int,skill_cat_id Varchar(50)

tbljobpost:

+-------------------------------------+
| job_id | job_title  | skill_cat_id  |
+-------------------------------------+ 
| 1      | Programmer | 1,2,3,4,5,6,7 | 
+-------------------------------------+ 

tblappskills:

+-----------------------------+ 
| app_control | skill_cat_id  | 
+-----------------------------+ 
| 1           | 1,2,4,5,6     | 
| 2           | 1,2,3,7,4     | 
| 3           | 1,2,3,4,5,6,7 | 
| 4           | 7,1,4,5,6,2,3 |
+-----------------------------+ 

如何查询或过滤使用tblappskills逗号分隔的同一skill_cat_id tbljobpost? 结果将是这样的:

+-----------------------------+ 
| app_control | skill_cat_id  | 
+-----------------------------+ 
| 3           | 1,2,3,4,5,6,7 | 
| 4           | 7,1,4,5,6,2,3 |
+-----------------------------+

1 个答案:

答案 0 :(得分:1)

您的解决方案不适合first normal form

您应该将技能类别存储在不同的单元格中,如下所示:

+----------------------------+
| app_control | skill_cat_id |
+----------------------------+
| 1           | 1            |
| 1           | 2            |
| 2           | 1            |
| 4           | 4            |
+----------------------------+ 

然后,您可以轻松地JOIN表并选择与您想要的值匹配的行。 app-control-id在表格中出现不止一次并不重要。但是,如果您决定将其他数据添加到该表,则应在单独的表中执行此操作以避免冗余,如下所示:

您的新表(包含有关app-control的详细信息)与我上面提到的表1(0..N)相关。设计很难解释但很容易。如果你研究上面提到的正常形式,你会很容易理解这一点。