我有下表:
- 包含字段 job_id int、job_title varchar(50)、skill_cat_id varchar(50) 的 tbljobpost
- 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 |
+-----------------------------+
如何查询或过滤与 tbljobpost
具有相同 skill_cat_id
(以逗号分隔)的 tblappskills
?
结果会是这样的:
+-----------------------------+
| app_control | skill_cat_id |
+-----------------------------+
| 3 | 1,2,3,4,5,6,7 |
| 4 | 7,1,4,5,6,2,3 |
+-----------------------------+
最佳答案
您的解决方案不适合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) 相关。这很难解释,但很容易设计。如果你研究一下上面提到的范式,你就会很容易理解这一点。
关于MySQL 选择一个字段中的值与另一表中的值匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7565442/