ホームページ > データベース > mysql チュートリアル > SQL SELECT ステートメントで複数のテーブルを結合するときに行の重複を回避するにはどうすればよいですか?

SQL SELECT ステートメントで複数のテーブルを結合するときに行の重複を回避するにはどうすればよいですか?

DDD
リリース: 2024-12-05 21:19:14
オリジナル
897 人が閲覧しました

How Can I Avoid Duplicate Rows When Joining Multiple Tables in SQL SELECT Statements?

複数テーブルの SELECT ステートメントでの重複結果の回避: 総合ガイド

複数のテーブルのデータを結合する SELECT ステートメントを実行すると、例のように重複行が発生する可能性があります。提供されたシナリオでは:

SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
ログイン後にコピー

このクエリは、飲み物の 5 行を取得します。写真は唯一のユニークなフィールドです。ただし、名前と価格が繰り返されるため、「ファンタ」などの飲み物の行が重複します。

解決策: グループ化関数と集計関数

これらの重複を排除するには、グループ化と集計を利用する必要があります。機能。グループ化を使用すると、共通の値に基づいて行を結合できますが、集計関数を使用すると、グループごとに特定の値を抽出できます。

ドリンクによるグループ化

各ドリンクに 1 つの行が必要な場合は、関連付けられている写真の数に関係なく、ドリンク ID でグループ化できます:

SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id
ログイン後にコピー

このクエリは、 return:

name price photo
fanta 5 ./images/fanta-1.jpg
dew 4 ./images/dew-1.jpg

GROUP_CONCAT による写真の連結

各ドリンクの写真の配列が必要な場合、MySQL は同じグループの値を連結する GROUP_CONCAT 関数を提供します。

SELECT name, price, GROUP_CONCAT(photo, ',')
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id
ログイン後にコピー

このクエリはyield:

name price photo
fanta 5 ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg
dew 4 ./images/dew-1.jpg,./images/dew-2.jpg

考慮事項

連結された値にカンマが含まれている場合、データベースのパフォーマンスの問題が発生したり、過度に大きな文字列が返されたりする可能性があるため、GROUP_CONCAT は注意して使用する必要があることに注意してください。

以上がSQL SELECT ステートメントで複数のテーブルを結合するときに行の重複を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート