ホームページ >データベース >mysql チュートリアル >テーブルをリンクせずに、MySQL で区切り値で区切られた複数のテーブルのデータを結合する方法

テーブルをリンクせずに、MySQL で区切り値で区切られた複数のテーブルのデータを結合する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 09:31:30997ブラウズ

How to Join Data from Multiple Tables with Delimited Values in MySQL Without Linking Tables?

MySQL で区切られた値を使用して複数のテーブルからデータを結合する

質問:

どのようにすればよいですかを使用せずに、列の 1 つにセミコロンで区切られた値を持つ複数のテーブルからデータを効率的に取得します。外部言語を使用するのか、リンク テーブルを導入するのか?

回答:

この問題に対処するには、セミコロンで区切られた値を個々の行に変換する手法を利用できます。これにより、テーブルを結合して目的の結果を得ることができます。

ソリューション:

提供されたソリューションは 2 つのカスタム MySQL 関数を使用します:

  • COUNT_IN_SET(haystack, delim): の数を返します。指定された文字列内の文字区切りの項目。
  • VALUE_IN_SET(haystack, delim, what): 区切りリストを配列として扱い、指定されたインデックス (that) の値を取得します。

これらの関数は、integerseries テーブルを使用して反復的にユーザー テーブルとリソース テーブル間の結合と結合されます。セミコロンで区切られた値:

<code class="sql">SELECT user_resource.user, 
       resource.data

FROM user_resource 
     JOIN integerseries AS isequence 
       ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';') /* normalize */

     JOIN resource 
       ON resource.id = VALUE_IN_SET(user_resource.resources, ';', isequence.id)      
ORDER BY
       user_resource.user,  resource.data</code>

このクエリの結果、各ユーザーのリソースが個別の行として表されるテーブルが作成され、リソース テーブルと簡単に結合して対応するデータを取得できます。

追加情報:

  • integerseries テーブルには、使用される値のシーケンスが含まれています区切りリストを正規化します。
  • COUNT_IN_SET 関数と VALUE_IN_SET 関数は、区切りリストを処理する必要がある他のシナリオで再利用できます。
  • SQLite データベースの場合、同様のソリューションが利用可能です: https:/ /stackoverflow.com/a/24750820/302036

以上がテーブルをリンクせずに、MySQL で区切り値で区切られた複数のテーブルのデータを結合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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