如何在多个表上进行sql条件连接?

时间:2014-04-28 15:29:51

标签: sql join

我有一个已经存在的SQL请求,它连接了8个表的togethers,我需要添加3个mores表来为我的数据添加一个兼性信息。

对于此任务,我们可以忽略6个表(捆绑在other_tables中):

db schema

红色框中的部分是我要添加的部分。我只想添加尊重一些条件的request。如果没有找到,我仍然需要我的人,但Request列中没有数据。

到目前为止,我尝试了这一点,但是多个left join似乎很丑陋且过于包容。

Select [...], request.Id
From [Action] inner join [other tables on ...] inner join
    Person on Action.PersonId = Person.Id left JOIN 
request as r on r.PersonId = Person.Id left JOIN
Subject as s on s.SubjectId = r.SubjectId left JOIN
TypeRequest tr on tr.IDSujet = s.SubjectId
Where 
([already existing conditions]) and typeRequest = 'MOVE' (?)

再次重新说明我想要的内容:根据某些过滤器(在其他表上)获取所有actions,同时获取它们所链接的person。如果person具有特定Request的{​​{1}},请将TypeRequest添加到数据行。

1 个答案:

答案 0 :(得分:1)

上面的查询是否有效? "看起来丑陋而且过于包容"有点模糊。 你得到你想要的结果吗? 你也可以将where子句的一部分移动到连接中,如下所示:

    Select [...], request.Id
From [Action] inner join [other tables on ...] inner join
    Person on Action.PersonId = Person.Id left JOIN 
request as r on r.PersonId = Person.Id left JOIN
Subject as s on s.SubjectId = r.SubjectId left JOIN
TypeRequest tr on tr.IDSujet = s.SubjectId **and typeRequest = 'MOVE'**
Where 
([already existing conditions])