MySQL如何在一次选择中查询五个表

MySQL如何在一次选择中查询五个表,mysql,Mysql,我有以下5个表格: tbl_individid-由用户数据(uID、名字、姓氏、手机、电子邮件)组成 tbl_角色-由角色组成(rID、Rolename、RoleDescription) tbl_组-由组(gID、Groupname、GroupDescription)组成 tbl_inro-由用户具有的角色(uID、rID)组成 tbl\u ingr-由用户所属的组(uID、gID)组成 我希望在输出中列出tbl_Individual中的所有用户,并列出每个用户的角色以及他们所属的组 我创建

我有以下5个表格:

  • tbl_individid-由用户数据(uID、名字、姓氏、手机、电子邮件)组成
  • tbl_角色-由角色组成(rID、Rolename、RoleDescription)
  • tbl_组-由组(gID、Groupname、GroupDescription)组成
  • tbl_inro-由用户具有的角色(uID、rID)组成
  • tbl\u ingr-由用户所属的组(uID、gID)组成
我希望在输出中列出tbl_Individual中的所有用户,并列出每个用户的角色以及他们所属的组

我创建了tbl\u inro来只映射用户(uID)和角色(rID),同样的tbl\u ingr也只映射用户(uID)和组(gID)


它全部作为一行中的输出?

我已经使用内部连接连接了表。如果更好的话,你可以使用左连接。这基本上采用了公共字段,并按要求将它们链接在一起

SELECT      * 
FROM        tbl_individ tbl_ind
INNER JOIN  tbl_inro tbl_inro
ON          tbl_inro.uID = tbl_ind.uID
INNER JOIN  tbl_role tbl_role
ON          tbl_role.rID = tbl_inro.rID
INNER JOIN  tbl_ingr tbl_ingr
ON          tbl_ingr.uID = tbl_ind.uID
INNER JOIN  tbl_group tbl_group
ON          tbl_group.gID = tbl_ingr.gID

如果您希望将所有用户组和角色放在一行中,我认为您需要类似于
group\u concat
的内容。大概是

SELECT tbl_individ.uID, tbl_individ.Firstname, tbl_individ.Lastname, tbl_individ.Mobile, tbl_individ.eMail, 
 group_concat(Groupname separator ', ') as groups, 
 group_concat(Rolename separator ', ') as roles
FROM tbl_individ LEFT OUTER JOIN tbl_inro
  ON tbl_inro.uid = tbl_individ.uid
 LEFT OUTER JOIN tbl_role
  ON tbl_role.rid = tbl_inro.rid
 LEFT OUTER JOIN tbl_ingr
  ON tbl_ingr.uid = tbl_individ.uid
 LEFT OUTER JOIN tbl_group
  ON tbl_group.gid = tbl_ingr.gid
GROUP BY tbl_individ.uID, tbl_individ.Firstname, tbl_individ.Lastname, tbl_individ.Mobile, tbl_individ.eMail

切勿使用
选择*
谢谢您的输入。OP可以根据自己的需要进行计算。请注意,在服务器变量确定字符数后,group_concat将截断(这不是问题,但需要注意)如果一个用户有多个角色,则重复每个组名的次数与重复角色的次数相同;如果一个用户有多个组,则重复每个角色名的次数与重复组的次数相同。改为使用
group\u concat(distinct…
(尽管这只会显示每个名称一次,即使有多个组/角色具有相同的名称)。