Mysql 连接四个表的SQL查询

Mysql 连接四个表的SQL查询,mysql,sql,Mysql,Sql,但在加入nda和权限表时遇到问题。我将按如下方式执行此操作: SELECT u.First_Name, u.Last_Name, n.Nda_Signed FROM user u JOIN nda n ON u.User_Id = n.User_Id JOIN investment i ON i.Investment_Id = n.Investment_Id WHERE i.Investment_Id =347 内联视图(x)合并nda和权限表,并通过typ列指示每行的源。内联视图连接

但在加入nda和权限表时遇到问题。

我将按如下方式执行此操作:

SELECT u.First_Name, u.Last_Name, n.Nda_Signed 
FROM user u 
JOIN nda n ON u.User_Id = n.User_Id 
JOIN investment i ON i.Investment_Id = n.Investment_Id 
WHERE i.Investment_Id =347

内联视图(x)合并nda和权限表,并通过typ列指示每行的源。内联视图连接回用户id上的用户表。然后您可以有条件地聚合以查找哪些是nda签名的,并查看\U perm 1/0。

为什么在投资表上没有用户id,而不是nda和权限表?这似乎是多余的,更难处理那些用户的Id,这些Id是为特定投资签署NDA(在NDA表格的情况下)的用户的Id。将有很多用户签署保密协议的特定投资。NDA表适用于签署投资NDA的人员。权限表用于检查是否允许用户查看特定投资。啊,好的。没关系,我认为每项投资都会与nda和权限上的一个用户关联。我想现在还不清楚的是,为什么nda和权限是分开的表。这并不是过于复杂吗?这取决于,即使投资出现在nda表上,而不是权限表上,上述方法也会起作用(或反之亦然)是的,我认为设计就是这样flawed@strawberry我不反对这一点,最好有一个表的末尾有一个列,名为“typ”,表示nda或per(基本上使表的实际结构与我在内联视图中合并两个表的方式相同)@BrianDeMilia上述查询工作正常。谢谢。
SELECT u.First_Name, u.Last_Name, n.Nda_Signed 
FROM user u 
JOIN nda n ON u.User_Id = n.User_Id 
JOIN investment i ON i.Investment_Id = n.Investment_Id 
WHERE i.Investment_Id =347
select u.user_id,
       u.first_name,
       u.last_name,
       sum(case when typ = 'nda' and yesno = 1 then 1 else 0 end) as nda_signed,
       sum(case when typ = 'per' and yesno = 1 then 1 else 0 end) as vw_perm
  from user u
  join (select investment_id, user_id, nda_signed as yesno, 'nda' as typ
          from nda
        union all
        select investment_id, user_id, view_permission, 'per'
          from permission) x
    on u.user_id = x.user_id
where investment_id = 'xyz'
group by u.user_id,
       u.first_name,
       u.last_name