Sql 如何通过另一个表从列中分离出多个值?
我有一个名为Sql 如何通过另一个表从列中分离出多个值?,sql,Sql,我有一个名为Team的表。每个记录可以有多个成员。我希望使用单独的表来满足要求,而不是使用逗号分隔的值Id是主键 ---------------------------- | Id | Name | Member ---------------------------- | 1 | TeamA | Jim, Jack ---------------------------- | 2 | TeamB | Micah 我想创建一个名为User的表UserId是PK和TeamId是FK
Team
的表。每个记录可以有多个成员。我希望使用单独的表来满足要求,而不是使用逗号分隔的值<代码>Id是主键
----------------------------
| Id | Name | Member
----------------------------
| 1 | TeamA | Jim, Jack
----------------------------
| 2 | TeamB | Micah
我想创建一个名为User
的表UserId
是PK
和TeamId
是FK
--------------------------
| UserId | Name | TeamId
--------------------------
| 123 | Jim | 1
--------------------------
| 456 | Jack | 1
--------------------------
| 789 | Micah | 2
然后我希望父表Team
能够从其子表引用Jim和Jack
,但我不确定如何在一对多关系中表示它。。。我知道下面的表达是不正确的
------------------------
| id | Name | Member
------------------------
| 1 | TeamA | 123, 456
看起来您需要创建一个映射表来表示团队、成员关系,这将使其成为多对多关系
TeamMemberMap - TeamId, MemberId
(表)小组:
(表)成员:
案例1(一对多):
每个成员都可以在一个团队中:
只需将TeamId
(FK)添加到成员表中即可
案例2(多对多):
每个成员都可以加入任意数量的团队:
添加链接表:
(表)团队成员:
TeamId(FK), MemberId(FK)
这确实意味着进一步规范化数据,也就是说拆分表—您的数据在每个列级别都不是原子的。因此,应进行规范化,以避免数据检索中的困难
用户表
User Id(pk) TeamId(fk)
成员表
TeamId(pk) , MemberId, NAME
质疑
Select
u.userid, memberid, m.namefrom
users u join members m
On u.userid=m.memberid and
u.teamid=m.teamid
创建一个列出用户团队的用户表是正确的。不确定是否需要每个团队的成员列。您可以使用团队和用户上的联接进行查询,然后按团队id分组以获取数据。为什么需要在父表中包含子表引用?如果这是一对多关系,那么只有TeamId就可以解决(大多数)情况。所以我想听听你为什么想要引用的用例?什么数据库?这看起来可能是mySQL。可能是这样:谢谢你的时间!我曾想过要有一个映射表,但我无法以独特的方式从Team
引用到mapping
表。。。我想我意识到了误解。我不需要保留Members
列。或者正如您和@Pilan所说,我可以使用这个映射表,只要有TeamId(FK),MemberId(FK)
。这对我也很有用。
TeamId(pk) , MemberId, NAME
Select
u.userid, memberid, m.namefrom
users u join members m
On u.userid=m.memberid and
u.teamid=m.teamid