ホームページ >データベース >mysql チュートリアル >カンマ区切りの結合フィールドを使用してテーブルを結合する方法: SQL ソリューション?
カンマ区切りの結合フィールドを使用したテーブルの結合
複数のテーブルのデータを統合する場合、次の内容を含むフィールドに対して結合を実行する必要がある場合があります。カンマ区切りのリスト。これは、従来の結合方法にとって課題となる可能性があります。次のシナリオを考えてみましょう:
シナリオ:
2 つのテーブル、カテゴリ、およびムービーがあります。カテゴリ テーブルには、一意の ID と名前を持つカテゴリが含まれています。映画テーブルには、複数のカテゴリ ID をカンマ区切りのリストとして格納するカテゴリ列が含まれています。タスクは、これらのテーブルを結合し、映画テーブルからカテゴリ列を除外し、代わりにカテゴリ テーブルから一致するカテゴリ名を配列に選択することです。
解決策:
この課題を克服するには、標準の結合構文に変更を加えることができます。
select m.id, group_concat(c.name) from movies m join categories c on find_in_set(c.id, m.categories) group by m.id
このクエリでは、結合条件内で find_in_set() 関数が使用されています。この関数は、カテゴリ テーブルのカテゴリ ID が、映画テーブル内のカテゴリ ID のカンマ区切りリストに存在するかどうかを確認します。
group_concat() 関数は、一致するすべてのカテゴリ名を連結するために SELECT 句で使用されます。配列に入れます。 group by 句により、データが映画 ID によってグループ化され、映画ごとに関連するカテゴリ名を含む 1 行が生成されます。
例:
サンプルを考えてみましょう。質問に記載されている:
テーブル カテゴリ:
id | name |
---|---|
1 | Action |
2 | Comedy |
4 | Drama |
5 | Dance |
テーブル ムービー:
id | categories |
---|---|
1 | 2,4 |
2 | 1,4 |
4 | 3,5 |
変更されたものの実行結合クエリは次の出力を生成します:
テーブル出力:
id | categories |
---|---|
1 | Comedy,Drama |
2 | Action,Drama |
4 | Other,Dance |
この結果では、映画テーブルのカテゴリ列が除外されており、対応するカテゴリ テーブルのカテゴリ名が各映画の配列に選択されています。
以上がカンマ区切りの結合フィールドを使用してテーブルを結合する方法: SQL ソリューション?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。