次のフィールドで設定されたビュー テーブルがあります。
paymentID、jobID、jobNumber、jobType、countType、countID、salesRep、dealershipName、checkTS、paymentAmount、estimatedMailArrival
checkTS が特定の日付範囲内にある場合、これらのフィールドを選択する必要があります。(checkTS は日時フィールドです)。これらのフィールドに加えて、jobtasks という名前の別のテーブルから 2 つのタイムスタンプを選択する必要があります (存在する場合と存在しない場合があるため、左結合を使用します)。これを行うために、次のクエリを設定しました。
SELECT
s.jobID, s.jobNumber, s.jobType, s.countType, s.countID, s.salesRep, s.dealershipName, s.checkTS, s.paymentID, s.paymentAmount, s.estimatedMailArrival,
jt1.completedTimestamp as Art,
jt2.completedTimestamp as List
FROM salesboard s
LEFT JOIN jobtasks jt1 ON s.jobID = jt1.jobID
LEFT JOIN jobtasks jt2 ON s.jobID = jt2.jobID
WHERE
s.checkTS BETWEEN '2013-03-01 00:00:00' AND '2013-03-31 23:59:59' AND
jt1.taskID = 22 AND
jt2.taskID = 23
ORDER BY s.checkTS DESC;
クエリはエラーを返しませんが、すべてのレコードをプルしていないことがわかりました (プルする必要がある 242 のうち 182 をプルしています)。手動でデータベース (mysql) にアクセスして、プルする必要があるレコードを表示できますが、そうではありません。一例 - 「2013-03-04 10:11:00」のタイムスタンプは取得されていません。
Art と List のものをすべて削除すると、正しい数の結果が得られます... 242.
SELECT
s.jobID, s.jobNumber, s.jobType, s.countType, s.countID, s.salesRep, s.dealershipName, s.checkTS, s.paymentID, s.paymentAmount, s.estimatedMailArrival
FROM salesboard s
WHERE
s.checkTS BETWEEN '2013-03-01 00:00:00' AND '2013-03-31 23:59:59'
ORDER BY s.checkTS DESC;
左結合を使用している場合、一部のレコードが返されないのはなぜですか?