このトピックについて、ここやインターネット上で多くのスレッドが作成されていることを知っています。しかし、私は 2 つのステートメントの違いに関する最終的なポイントを得ることができません! つまり、試行錯誤を繰り返して、クエリで必要なすべての結果に到達できますが、実際にはナイフを完全に制御することはできません!
私は自分自身を非常に優れたプログラマーであり、非常に優れた SQL-ista だと考えていますが、これについて少し恥ずかしい思いをしています...
次に例を示します。
- Web サイトのページ ("web_page") を含むテーブルがあります。
- カテゴリを含むテーブル (「カテゴリ」)。
- カテゴリには 1 つまたは複数のページを含めることができますが、その逆はできません
- カテゴリにはページがまったく含まれていない可能性があります
- Web サイトでページを表示することも、しないこともできます
したがって、すべてのカテゴリとそのページを表示したい場合は、ページのあるカテゴリとないカテゴリの両方を意味し、次のようにする必要があります。
FROM category
LEFT JOIN web_page ON ( web_page.category_id = category.category_id AND web_page.active = "Y" )
したがって、カテゴリにページがない場合、そのカテゴリのレコードに web_page_id NULL が表示されます。
しかし、もしそうなら:
FROM category
LEFT JOIN web_page ON ( web_page.category_id = category.category_id )
...
WHERE web_page.active = "Y"...
少なくとも 1 つの web_page を持つカテゴリのみを選択します...しかし、なぜですか?
これはほんの一例でした… この違いを一度は理解しておきたい!
ありがとうございました。