2014-04-28 36 views
1

我有一个已经存在的SQL请求,加入8个表格,我需要添加3个表格来向我的数据添加兼容信息。如何在多个表上执行sql条件连接?

对于这个任务,我们可以忽略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具有特定TypeRequestRequest,请将Request id添加到数据行。

回答

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]) 
+0

我写了“太包容性的”,因为与查询额外的'左join'返回多个结果(尽管它不应该改变)。而且'3 left join'感觉很难看,因为_I感觉它应该是在'request'上的'left join'和''subject'和'typeRequest'上的'inner join'。 – Kraz

+0

如果您有三个共有1个字段的表,您只能从所有三个表中选择结果和2个连接。也许你的表格过度标准化。 – b3ko

+0

我用你在回答中提出的建议,它似乎有效。谢谢。 (我也不能更改数据库结构)。 – Kraz

相关问题