2012-11-04 209 views
0

我有点难以代表查询。我想转换成SQL语句的语句是:MySQL:从多个表加入

select count(*) 
from assigned, tasks 
where 
assigned.id_task = 1 
or 
(assigned.id_project=tasks.id_project and tasks.id=1) 

我成功地拿出迄今:

select count(*) 
from assigned a 
left join projects p 
    on p.id=a.id_project 
left join tasks t 
    on t.id_project=p.id 
where (a.id_task=1 or t.id=1) 

然而,第二个没有返回正确的结果。我错过了什么?

+0

您的预期结果是什么?第二个查询结果如何错误?这个项目表来自哪里(这不是第一次选择)?你的表格是如何定义的? –

+0

第一条语句已经是一条SQL语句。你想以什么方式“*转换*”? – eggyal

+0

@eggyal很好吗?与直接从表中选择相比,加入速度更快吗? – Andrew

回答

1

我并不感到惊讶,第二个查询返回的结果不同,因为它使用了附加表和不同的连接条件。虽然第二个select应该至少提供与第一个相同数量的行,因为第一个使用内部联接,第二个使用左侧联接。

第一个查询也使用连接。它只是含蓄地表达。

+0

对。我用与第一个返回相同结果的查询回答了问题。谢谢 – Andrew

1

我想出了问题所在。正确的join查询是:

select count(*) 
from assigned a 
left join tasks t 
    on t.id_project=a.id_project 
where (a.id_task=1 or t.id=1) 
+0

我很高兴你找到了解决方案。 –