0

ここでスティックの端が間違っている可能性がありますが、外側の結合により、(たとえば)左側のテーブルにあるすべてのレコードと、右側のテーブルからの一致する結果、およびnullが得られるはずだと思いました。一致するものがなかったところ。

クエリする必要のあるテーブルが3つあります。人と詳細は直接1:1の関係にあります。3番目のテーブルは時間です。これは、1人あたり、プロジェクトごとに、週単位で作業した時間を保存します。私は一人一人が下に置いた週数のカウントが必要です。

以下は、各ユーザーが1週間を超えて時間を置いている限り、時間を置いた週数を示しています。

SELECT name, detail.clock, COUNT(DISTINCT(week))
FROM person, detail,     
WHERE person.ref = detail.person
AND detail.clock = time.clock
WHERE time.week >= "2010-07-01" 
GROUP BY detail.clock

つまり、これは時間を入力した80/100人を表示します。

でもまだ時間を割いていない20人に会う必要があるので、次のアウタージョインを試してみました

SELECT name, detail.clock, COUNT(DISTINCT(week))
FROM person LEFT OUTER JOIN detail ON person.ref = detail.person
LEFT OUTER JOIN time ON detail.clock = time.clock
WHERE time.week >= "2010-07-01" 
GROUP BY detail.clock

ただし、これにより、最初のクエリとまったく同じ結果が得られます。

編集:私はちょうど問題の一部を発見しました。疑似コードの元のバージョンでは、日付によるちらつきはありませんでした。日付フィルターを削除すると、クエリが期待どおりに動作することがわかりました。ただし、遅すぎて役に立たず、日付が重要です。

4

1 に答える 1

1

Jeff Atwood による JOIN のビジュアル ガイドをチェックして、問題を解決できるかどうかを確認してください。

于 2010-07-21T14:22:45.497 に答える