MySQL で対応が欠落している複数のテーブルから選択する
1 つのテーブルにすべての行がないシナリオでも、複数のテーブルにわたって効果的にクエリを実行するには対応するエントリが別のエントリにある場合、MySQL は外部結合の概念を提供します。カテゴリと製品テーブルを持つオンライン ショップのシナリオを考えてみましょう。
すべてのカテゴリを取得し、それぞれの最小価格と最大価格を計算するとします。ただし、製品のないカテゴリを含め、その最小価格と最大価格を 0 に設定したいと考えています。元のクエリ:
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
LEFT JOIN はカテゴリ (sc) テーブル内のすべての行を保持し、クエリで製品を含まないカテゴリを含むすべてのカテゴリを取得できるようにします。 IFNULL 関数は、null 値 (対応する製品がない場合に発生する) を 0 に設定し、minp と maxp が常に有効な値で返されるようにします。
このアプローチにより、クエリは、カテゴリに関係なく、すべてのカテゴリを取得します。対応する製品があるかどうかを確認し、不足している価格情報には 0 を正しく割り当てます。
以上がMySQL で、製品のないカテゴリも含めて、すべてのカテゴリとその最小/最大製品価格を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。