【发布时间】:2021-11-10 12:01:18
【问题描述】:
我有一个类似下面的场景(Oracle 的 SQL)。
表:Employee
| S.No | Name | Role |
|---|---|---|
| 1 | a | ELE,PLU,OTH |
| 2 | b | MAN,DIR |
| 3 | c | DIR,FND |
| 4 | d |
表:Role_master
| Role | Role name |
|---|---|
| ELE | Electrician |
| PLU | Plumber |
| MAN | Manager |
| DIR | Director |
| FND | Founder |
| OTH | Other |
对于上面的表格,我想加入这两个表格,并期待如下所示的输出。请提供更好的方法。
| S.No | Name | Role |
|---|---|---|
| 1 | a | Electrician,Plumber,Other |
| 2 | b | Manager,Director |
| 3 | c | Director,Founder |
| 4 | d |
【问题讨论】:
-
在单列(您的 EMPLOYEE 表的 ROLE 列)中有一个以逗号分隔的值列表违反了数据设计的very first 规则。如果一个员工可以有多个角色,那么应该有第二个表,比如 EMP_ROLES,每个员工/角色组合有一行,还有一个返回 EMPLOYEE TABLE 的 FK。适当的数据设计使这样的问题变得微不足道,甚至使它们完全消失。你应该花一些时间研究数据标准化。