同等の「ANSIJOIN」構文を使用してこれを説明します:
オプション1
SELECT *
FROM TXN
LEFT JOIN CHK
ON TXN.CHK_ID = CHK.CHK_ID
WHERE TXN.CURRENT = 'Y'
AND CHK.CURRENT = 'Y'
オプション2
SELECT *
FROM TXN
LEFT JOIN CHK
ON TXN.CHK_ID = CHK.CHK_ID
AND CHK.CURRENT = 'Y'
WHERE TXN.CURRENT = 'Y'
ご覧のとおり、オプション1では、定数述語が後に適用されます。 LEFT JOIN テーブル式が指定されています。つまり、LEFT JOINの結果に基づいています。 。
オプション2では、定数述語の1つがLEFT JOINの一部です。 式。
LEFT JOINはどのように機能しますか 仕事ですか?
LEFT JOINのアイデア LEFTからすべての行を返すということです JOINの側面 結合述語が与えられた場合、反対側に一致する行があるかどうかに関係なく、式。したがって、オプション2では、CHKに行が見つかったかどうかに関係なく CURRENT = 'Y'を使用 TXNの行の場合 、TXNの行 まだ返されます。これが、オプション2でより多くの行を取得する理由です。
また、この例では、「ANSIJOIN」構文を使用する理由を説明する必要があります。メンテナンス/読みやすさの観点から、クエリが何をしているのかがはるかに明確になります。