ホームページ >データベース >mysql チュートリアル >SQL で同じ列の複数の条件に一致するレコードを効率的に選択するにはどうすればよいですか?

SQL で同じ列の複数の条件に一致するレコードを効率的に選択するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-21 15:56:10256ブラウズ

How to Efficiently Select Records Matching Multiple Conditions on the Same Column in SQL?

同じ列のレコードに対する SQL 複数条件クエリのヒント

SQL クエリで、複数の条件に基づいてレコードをフィルタリングするには、特にこれらの条件が同じ列に適用される場合は、ある程度のスキルが必要です。この記事では、この状況に効率的に対処する方法について説明します。

たとえば、1 つのテーブルはユーザーとタグ タイプを関連付けており、目標はすべての検索フォームのチェックマークに一致する連絡先 ID を取得することです。 一見すると、次のクエリは直感的に見えます:

<code class="language-sql">SELECT contactid 
WHERE flag = 'Volunteer' 
AND flag = 'Uploaded'...</code>

ただし、結果は返されません。 AND 演算子では、同じ行が 2 つの条件を同時に満たす必要がありますが、そのような行はこのテーブルには存在しないためです。

この問題を解決するには、GROUP BYHAVING COUNT(*) = n を使用する方法があります。ここで、n は選択されたマーカーの数です。

<code class="language-sql">SELECT contact_id
FROM your_table
WHERE flag IN ('Volunteer', 'Uploaded', ...)
GROUP BY contact_id
HAVING COUNT(*) = 2 -- // 必须与WHERE flag IN (...) 列表中的数量匹配</code>

このメソッドは、WHERE 句に含まれる n 個のタグのそれぞれで contact_id が n 回出現するかどうかをチェックします。 もう 1 つの方法は、結合を使用することです:

<code class="language-sql">SELECT T1.contact_id
FROM your_table T1
JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded'
-- // 如有必要,可以添加更多连接
WHERE T1.flag = 'Volunteer'</code>

ここでは、複数の結合を使用して、同じ contact_id を表す行を必要なタグと関連付けます。

どの方法を選択するかは、チェックするタグの数と一致するレコードの数によって異なります。 GROUP BY は、多数のタグと少数の一致を処理する場合に高速になる可能性がありますが、タグの数が少なく、多数の一致がある場合には結合のパフォーマンスが向上する可能性があります。最高のパフォーマンスを得るには、実際のデータで両方の方法をテストすることをお勧めします。

以上がSQL で同じ列の複数の条件に一致するレコードを効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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