こんなお問い合わせを頂きました
SELECT * FROM dayTable
LEFT JOIN ProcessTable firstprocess
ON dayTable.id = a.daytablefkid
AND firstprocess.processid in (1234)
AND firstprocess.daytablefkid
IN (SELECT id
FROM daytable
WHERE dayTable.DateFrom > @dateFrom
AND dayTable.DateTo < @dateTo)
LEFT JOIN ProcessTable secondprocess
ON daytable.id = secondprocess.daytablefkid
and secondprocess.processid in (4567)
IN (SELECT id
FROM daytable
WHERE dayTable.DateFrom > @dateFrom
AND dayTable.DateTo < @dateTo)
WHERE dayTable.DateFrom > @dateFrom AND dayTable.DateTo < @dateTo
最初に気付いたのは、結合の最初の IN ステートメント "IN(XXXX)" は WHERE ステートメントに変換できることですが、両方の結合の 2 番目の IN ステートメントは、同じフィルター処理が行われるため、少し混乱します。クエリの終わり。
それらが実際に冗長であるか、またはそれらが削除された場合に結果セットが異なる可能性があるかどうか疑問に思っていますか?