オンライン ショップを維持する場合、次のような複数のテーブルからデータを取得する必要がある状況に遭遇することがあります。カテゴリや製品として。ただし、一方のテーブルのすべての行にもう一方のテーブルに対応するエントリがあるわけではない場合、問題が発生します。このシナリオに対処するために、2 つのテーブルからデータを選択し、対応関係がない場合でもすべての行が返されるようにする方法を検討してみましょう。
2 つのテーブルを考えてみましょう。1 つは次のカテゴリ用です。列 ID とタイトル、もう 1 つは列 ID、ownerid、title、price を持つ製品の列です。ownerid は親カテゴリの ID を参照します。次のクエリを使用して、すべてのカテゴリと各カテゴリの最小価格と最大価格を取得することを目的としています。
SELECT sc.*, MIN(s.price) AS minp, MAX(s.price) AS maxp FROM categories AS sc, products AS s WHERE s.ownerid = sc.id GROUP BY sc.id
ただし、このクエリは、関連する製品を持つカテゴリのみを取得します。製品のないものは省略され、不完全な結果が残ります。
この問題を解決し、対応する製品があるかどうかに関係なく、すべてのカテゴリが確実に選択されるようにするために、次の概念を採用します。 「外部結合」。基本的に、外部結合には、一方のテーブルに一致する行がない場合でも、一方のテーブルの行が含まれます。
LEFT JOIN 構文を使用して、クエリを次のように変更します。
SELECT sc.*, IFNULL(MIN(s.price), 0) AS minp, IFNULL(MAX(s.price), 0) AS maxp FROM categories AS sc LEFT JOIN products AS s ON s.ownerid = sc.id GROUP BY sc.id
この更新されたクエリを使用すると、すべてのカテゴリとそれぞれの最小価格と最大価格を取得できます。製品のないカテゴリの minp 値と maxp 値は 0 になり、すべてのカテゴリを含めるという要件を満たします。
空のカテゴリのデフォルト値として 0 を使用する代わりに、次のオプションを選択することもできます。代わりに null を返します。 0 と null のどちらを使用するかは、アプリケーションの特定の要件によって異なります。
MySQL で外部結合の概念をマスターし、null 値を処理することで、複数のテーブルからデータを効率的に抽出でき、データの完全性と正確性を確保できます。結果。
以上が複数の MySQL テーブルからデータを選択し、欠落している対応関係を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。