Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:从多个表到连接_Mysql - Fatal编程技术网

MySQL:从多个表到连接

MySQL:从多个表到连接,mysql,Mysql,我在表达一个查询时有点困难。我要转换为SQL语句的语句是: 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_projec

我在表达一个查询时有点困难。我要转换为SQL语句的语句是:

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)

但是,第二个没有返回正确的结果。我遗漏了什么?

第二个查询返回不同的结果并不奇怪,因为它使用了额外的表和不同的联接条件。尽管第二个select应该提供至少与第一个相同的行数,因为第一个select使用内部联接,第二个select使用左联接


第一个查询也使用联接。它只是隐式表达。

我找到了问题所在。正确的
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)

你期望的结果是什么?第二个查询结果如何出错?此项目表来自何处(不在第一个选择中)?表是如何定义的?第一条语句已经是SQL语句了。你想用什么方式“转换”?@eggyal可以吗?与直接从表中选择相比,联接不是更快吗?@OlafDietsche第一个查询返回1,第二个返回0.5。我用返回与第一个相同结果的查询来回答这个问题。谢谢我很高兴你找到了解决办法。