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

MySQL データベースでカンマ区切り値を使用してテーブルを効率的に結合するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-27 14:17:16576ブラウズ

How Can I Efficiently Join Tables with Comma-Separated Values in a MySQL Database?

1 つの列にカンマ区切りの値を含むテーブルを結合する

データベースを扱う場合、多くの場合、カンマを含む列に基づいてテーブルを結合する必要があります。 - で区切られた値。この特定のケースでは、テーブル C のカンマ区切り列 (「userids」) が特定の検索語に一致するユーザー名を取得しようとしています。

部分文字列抽出を使用した SQL クエリ

最初のクエリは、サブクエリを使用して、テーブル C の「userids」のカンマ区切り文字列から最初の値を抽出しようとしました。 カラム。ただし、このアプローチは、目的の値が常に文字列の先頭であると想定しているため、非効率的で信頼性が低くなります。

find_in_set を使用したクエリの改善

より良い解決策には、次の使用が含まれます。 MySQL の find_in_set 関数。カンマ区切り内の特定の値を検索できます。 string:

SELECT *
FROM tblC c
JOIN tblB b ON (find_in_set(b.userid, c.userids) > 0)
WHERE c.nname = "new1"

このクエリは、テーブル C 内の "nname" 列が "new1" と一致する行に関連付けられているすべてのユーザー名を効率的に取得します。

正規化スキーマ代替

ただし、カンマ区切りの値を列に格納することは、推奨される習慣ではありません。データの整合性とパフォーマンスを向上させるには、ジャンクション テーブルを導入してスキーマを正規化することをお勧めします。

提供された例では、次の 2 つの列を持つ新しいジャンクション テーブル (tblC_user) を作成できます: c_id (テーブルへの外部キー) C) とユーザー ID (テーブル B への外部キー)。これにより、カンマ区切りの文字列を必要とせずに、テーブル C と B の間の多対多の関係を表すことができます。

正規化されたクエリ

正規化されたクエリの使用スキーマを使用している場合、次のクエリを使用して目的の結果を取得できます:

SELECT *
FROM tblC c
JOIN tblC_user cu ON (c.id = cu.c_id)
JOIN tblB b ON (b.userid = cu.userid)
WHERE c.nname = "new1"

このクエリカンマ区切り値に基づいてテーブルを結合する、より効率的かつ信頼性の高い方法を提供します。

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

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