Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何通过另一个表从列中分离出多个值?_Sql - Fatal编程技术网

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