ホームページ >データベース >mysql チュートリアル >SQL を使用してカンマ区切り値を使用して 2 つのテーブルを結合するにはどうすればよいですか?

SQL を使用してカンマ区切り値を使用して 2 つのテーブルを結合するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-18 11:17:10976ブラウズ

How to Join Two Tables with Comma-Separated Values Using SQL?

カンマ区切りの値を使用して 2 つのテーブルを結合する

問題ステートメント

データベースの正規化によりデータ管理が大幅に強化されますが、場合によっては構造的な制限により実装が妨げられます。この質問では、正規化がオプションではない場合に、1 つのテーブルのカンマ区切り値を 2 番目のテーブルの値に関連付ける方法を検討します。

解決策

提供されたシナリオでは、Notes テーブルの「forDepts」列の値を、Positions テーブルの対応する名前と結合することを目的としています。予期される出力は、ノート ID (「nid」) のリストと、関連付けられた部門名がカンマで区切られて連結されたものです。

これを実現するには、FIND_IN_SET() 関数と GROUP_CONCAT() 関数を利用できます。 SQL クエリは次のとおりです。

SELECT  a.nid,
        GROUP_CONCAT(b.name ORDER BY b.id) DepartmentName
FROM    Notes a
        INNER JOIN Positions b
            ON FIND_IN_SET(b.id, a.forDepts) > 0
GROUP   BY a.nid

説明

  • FIND_IN_SET() 関数は、カンマで区切られた文字列に値が存在するかどうかを確認します。この場合、これを使用して、Positions テーブルの部門 ID が「forDepts」列で見つかるかどうかを判断します。
  • INNER JOIN 句により、両方のテーブルの一致する行のみが結合されます。
  • GROUP_CONCAT() 関数は、一致する部門の名前を ID 順に連結し、次の条件で区切ります。 commas.

補足

提供された PHP コードは、'forDepts' 列の最初の値のみを出力するようです。これは、クエリで使用されている LEFT JOIN が原因である可能性があります。すべての値を取得するには、代わりに INNER JOIN の使用を検討してください。

このアプローチは、データがカンマ区切り形式で保存されており、データベースを再構築せずに他の値と関連付ける必要がある状況に適用できます。

以上がSQL を使用してカンマ区切り値を使用して 2 つのテーブルを結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。