MySQL で複数のテーブルを使用した SELECT DISTINCT
MySQL クエリでは、ドリンク テーブルと Drinks_photos テーブルの間で暗黙的な結合を使用しています。 WHERE 句内の任意の条件。これにより、デカルト積が生成され、名前と価格の値が繰り返される 5 行が生成されます。これらの重複を排除するには、SELECT DISTINCT 句を使用できます。
ただし、各ドリンクのすべての写真を保持したい場合は、異なる行のみが返されるため、単純に SELECT DISTINCT を使用することはできません。代わりに、グループ化関数と集計関数を組み合わせて使用する必要があります。
グループ化関数と集計関数
グループ化は、指定された列に基づいて行を集計します。この場合、結果をドリンク ID でグループ化し、ドリンクごとに 1 行を取得します。次に、集計関数を使用して、グループ化された結果ごとに目的の値を選択できます。
たとえば、各ドリンクの最初の写真を取得するには、次のコマンドを使用できます。
SELECT name, price, MIN(photo) AS photo FROM drinks JOIN drinks_photos ON drinks.id = drinks_id GROUP BY drinks_id;
MIN () 集計関数は、各写真列の最小値を返します。 group.
GROUP_CONCAT
また、各ドリンクのすべての写真を 1 つの文字列に連結したい場合は、GROUP_CONCAT() 関数を使用できます。
SELECT name, price, GROUP_CONCAT(photo, ',') AS photos FROM drinks JOIN drinks_photos ON drinks.id = drinks_id GROUP BY drinks_id;
ただし、GROUP_CONCAT() は標準の SQL 集計ではないことに注意してください関数とその使用法はデータベースごとに異なる場合があります。
以上がMySQL で複数のテーブルで SELECT DISTINCT を使用するときに重複行を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。