0

クエリを表現するのに少し苦労しています。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)

ただし、2 番目は正しい結果を返しません。私は何が欠けていますか?

4

2 に答える 2

1

2 番目のクエリが別の結果を返すことは驚くことではありません。これは、追加のテーブルと異なる結合条件を使用するためです。2 番目の選択では、少なくとも最初の選択と同じ数の行が配信されるはずですが、最初の選択では内部結合が使用され、2 番目の選択では左結合が使用されるためです。

最初のクエリも結合を使用します。暗黙のうちに表現されているだけです。

于 2012-11-04T21:09:03.317 に答える
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)
于 2012-11-04T21:13:25.687 に答える