ホームページ  >  記事  >  データベース  >  MySQL でセミコロンで区切られた値に基づいてテーブルを結合できますか?

MySQL でセミコロンで区切られた値に基づいてテーブルを結合できますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-01 00:03:28939ブラウズ

Can I Join Tables in MySQL Based on Values Separated by Semicolons?

Pure MySQL でこれを解決できますか? (列内の「;」で区切られた値の結合)

質問:

「;」に基づいて結合する必要があるデータが複数のテーブルにあります。列内の値は (セミコロン) で区切られます。 PHP やその他の言語を使用して結果を操作することはできません。 MySQL のみを使用してこれを実現する方法はありますか?

答え:

はい、';' で参加することができます。純粋な MySQL を使用してカラム内の値を分離します。以下は解決策の詳細な説明です:

区切り文字列を行に変換する

重要なのは ';' を変換することです。区切り文字で区切られた文字列を一連の行に分割します。これは、次の手順を使用して実現できます。

  1. 区切り文字列内の項目の 1 から最大数までの数値を含む integerseries という名前のテーブルを作成します。
  2. COUNT_IN_SET と VALUE_IN_SET を使用します。区切り文字列内の項目の数をカウントし、その位置に基づいて各項目を抽出する関数。
  3. クロス結合を使用して、user_resource テーブルを integerseries テーブルと結合します。これにより、区切り文字列内の各項目の行が生成されます。

User_resource テーブルを正規化するクエリ

<code class="sql">SELECT user_resource.user, 
       user_resource.resources,
       COUNT_IN_SET(user_resource.resources, ';') AS resources_count, 
       isequence.id AS resources_index,
       VALUE_IN_SET(user_resource.resources, ';', isequence.id) AS resources_value
FROM 
     user_resource 
     JOIN  integerseries AS isequence 
       ON  isequence.id <= COUNT_IN_SET(user_resource.resources, ';')
ORDER BY
       user_resource.user, isequence.id</code>

正規化されたテーブルを結合するリソース テーブル

user_resource テーブルが正規化されたら、リソース テーブルと結合して目的の結果を得ることができます。

<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, ';')

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

サンプルの入力と出力

user_resource テーブル:

user resources
user1 1;2;4
user2 2
user3 3;4

resource テーブル:

id data
1 data1
2 data2
3 data3
4 data4
5 data5

Normalizeduser_resource テーブル:

user resources resources_count resources_index resources_value
user1 1;2;4 3 1 1
user1 1;2;4 3 2 2
user1 1;2;4 3 3 4
user2 2 1 1 2
user3 3;4 2 1 3
user3 3;4 2 2 4

出力 (結合結果):

user data
user1 data1
user1 data2
user1 data4
user2 data2

以上がMySQL でセミコロンで区切られた値に基づいてテーブルを結合できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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