カンマ区切り値を使用したテーブルの結合: 完全ガイド
データベース テーブルには、特定の列にカンマ区切り値が含まれることがよくあります。各値を対応する行に関連付ける必要があるため、データをクエリするときに問題が発生します。一般的なシナリオの 1 つは、一方の列にもう一方のテーブルを参照するカンマ区切り値が含まれる 2 つのテーブルを結合することです。
次の例を考えてみましょう:
Notes テーブル
nid | forDepts |
---|---|
1 | 1,2,4 |
2 | 4,5 |
ポジションテーブル
id | name |
---|---|
1 | Executive |
2 | Corp Admin |
3 | Sales |
4 | Art |
5 | Marketing |
目標は、Notes テーブルの 'forDepts' 列を、Positions テーブルの対応する部門名に関連付けることです。目的の出力は次のようになります。
nid | DepartmentName |
---|---|
1 | Executive, Corp Admin, Art |
2 | Art, Marketing |
データベース構造を変更せずに、SQL 関数の組み合わせを使用してこれを実現できます。
FIND_IN_SET と GROUP_CONCAT を使用する
FIND_IN_SET 関数と GROUP_CONCAT 関数を組み合わせて使用できます各 'forDepts' 値の部門名を抽出して集計するには:
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
仕組み
Result
クエリの出力は、目的のテーブルになります。 「nid」列と、対応するカンマ区切りの「DepartmentName」を結合したもの
結論
FIND_IN_SET 関数と GROUP_CONCAT 関数を活用すると、カンマ区切りの値を使用して 2 つのテーブルを効果的に結合でき、テーブル間でデータを抽出して集計できるようになります。データベース構造が正規化されていない場合でも。この手法は、Excel などの他のアプリケーションにデータをエクスポートする場合に特に役立ちます。
以上がSQL を使用してカンマ区切り値でテーブルを結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。