Mysql 将父数据左连接到多个左连接子数据的简单方法

Mysql 将父数据左连接到多个左连接子数据的简单方法,mysql,sql,left-join,Mysql,Sql,Left Join,是否有更简单的方法将父数据左键联接到多个子左键联接数据 表结构: Table1 {id, name, data1, data2, datax} Table2 {id, table1_id, dataA, dataB, userid} Table3 {id, table1_id, dataD, userid} Table4 {id, table1_id, dataE, userid} TableUsers {userid, username, name, email} SQL查询: select

是否有更简单的方法将父数据左键联接到多个子左键联接数据

表结构:

Table1 {id, name, data1, data2, datax}
Table2 {id, table1_id, dataA, dataB, userid}
Table3 {id, table1_id, dataD, userid}
Table4 {id, table1_id, dataE, userid}
TableUsers {userid, username, name, email}
SQL查询:

select Table1.*, Table2.*,Table3.*,Table4.*
from Table1 t1
left outer join Table2 t2 on t2.table1_id = t1.id
left outer join Table3 t3 on t3.table1_id = t1.id
left outer join Table4 t4 on t4.table1_id = t1.id
从这里开始,我想用实际的用户名替换userid字段,每个表都有不同的userid数据,因此与TableUsers的简单左连接将不起作用,因为它只对它设置为等于的表生效

我曾考虑过使用子查询进行此操作,但我相信这会非常慢:

select Table1.*,(select TableUser.name from TableUser where Table1.userid = TableUser.userid) as T1Name,
 Table2.*,(select TableUser.name from TableUser where Table2.userid = TableUser.userid) as T2Name,
Table3.*, (select TableUser.name from TableUser where Table3.userid = TableUser.userid) as T3Name,
Table4.*,(select TableUser.name from TableUser where Table1.userid = TableUser.userid) as T4Name
from Table1 t1
left outer join Table2 t2 on t2.table1_id = t1.id
left outer join Table3 t3 on t3.table1_id = t1.id
left outer join Table4 t4 on t4.table1_id = t1.id
其要点是从SQL数据库转移到MongoDB。也许我需要重新思考这个问题。。。 干杯

Chip

执行此操作的“正常”方法是添加其他联接:

select Table1.*, t1name.name, Table2.*, t2name.name, Table3.*, t3name.name,
       Table4.*, t4name.name
from Table1 t1
left outer join Table2 t2 on t2.table1_id = t1.id
left outer join Table3 t3 on t3.table1_id = t1.id
left outer join Table4 t4 on t4.table1_id = t1.id
left outer join TableUser t1name on t1.userid = t1name.userid
left outer join TableUser t2name on t2.userid = t2name.userid
left outer join TableUser t3name on t3.userid = t3name.userid
left outer join TableUser t4name on t4.userid = t4name.userid;

如果您有一个indexon
TableUser(userid)
TableUser(userid,name)
,那么这两个方法的性能应该大致相同。

嘿。如果Table2.table1\u id=Table3.table1\u id,Table2.userid=Table3.userid吗?数据1、2、x、a、b、d、e是否都是相同的类型?如果是这样的话,我会考虑重新构造。每个表中的用户ID数据将不同。最有可能的是,在1行中,表2的userid与userid的其他引用不同。数据1、2、x、a等也不是同一类型。每个表都是流程表的简单表示。每个进程都有自己要记录的数据和记录数据的用户。我创建了一个简单的表示,因为我的目标是理解一种更好的连接连接数据的方法。为了进一步说明它所起的作用有多小,您可以查看两个查询的执行计划。在SQL Server 2008中,我在一个批中同时运行了两个查询,执行计划显示,相对于该批,子查询select占49%,而join after查询占51%,因此理论上,这意味着在这种情况下子查询实际上更快。注意:我在一个非常小的数据集上运行了这个。只需在数据库中尝试一下,然后自己看看。我将使用它,它似乎比子查询更优雅。