ホームページ >データベース >mysql チュートリアル >カンマ区切りの列で特定の値を効率的にクエリする方法

カンマ区切りの列で特定の値を効率的にクエリする方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 17:02:29431ブラウズ

How to Efficiently Query a Comma-Separated Column for a Specific Value?

冗長な LIKE ステートメントを使用せずに、カンマ区切りの列に特定の値をクエリする方法

データベース テーブルには、多くの場合、カンマ区切りで格納される列があります。値のリスト。特定の値を含む行を取得するには、LIKE ステートメントを使用できます。ただし、複数の LIKE ステートメントを使用すると、面倒で効果がなくなる可能性があります。

LIKE ステートメントを使用する場合の欠点

この例では、テーブルにカテゴリがカンマ区切り値として格納されています。

ID | CATEGORIES
---------------
1  | c1
2  | c2,c3
3  | c3,c2
4  | c3
5  | c4,c8,c5,c100

「c2」を含む行を検索するには、

SELECT id FROM table WHERE categories LIKE '%c2%';

を使用できます。ただし、これは文字列内の任意の場所に「c2」を含む行とも一致するため、誤検知が発生します。 。複数の LIKE ステートメントを使用して特定の組み合わせを確認するのは、面倒でエラーが発生しやすい可能性があります。

代替アプローチ: カンマ区切り検索

より効率的なアプローチは、カンマ区切り検索:

select 
  * 
from
  YourTable 
where 
  ',' || CommaSeparatedValueColumn || ',' LIKE '%,SearchValue,%'

このクエリは、カンマで囲まれた完全な値を検索し、完全に一致することを保証します。ただし、値にスペースやカンマが含まれていないことを前提としているため、制限があります。

最適な解決策: 個別のカテゴリ テーブル

これらの制限を回避してパフォーマンスを向上させるには、多対多のリレーションシップを持つメイン テーブルにリンクされた別のカテゴリ テーブルを作成することを強くお勧めします。これにより、煩雑な文字列操作や誤一致のリスクを伴うことなく、効率的なクエリとデータ操作が可能になります。

以上がカンマ区切りの列で特定の値を効率的にクエリする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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