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

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

Barbara Streisand
リリース: 2025-01-21 16:11:10
オリジナル
945 人が閲覧しました

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

SQL の同じ列で複数の条件に一致するレコードを選択します

SQL クエリでは、同じ列の複数の条件に一致するレコードを取得する必要がある場合があります。ただし、同じ列に対して複数の WHERE 句を使用するだけでは、必ずしも期待どおりの結果が得られるわけではありません。次の例を考えてみましょう:

連絡先と各連絡先のステータスを示すフラグを含むデータベース テーブルがあります。テーブルには次のデータが含まれています:

ID contactid flag flag_type
118 99 Volunteer 1
119 99 Uploaded 2
120 100 Via Import 3
121 100 Volunteer 1
122 100 Uploaded 2

目標は、「ボランティア」と「アップロード済み」の両方のフラグ条件に一致する連絡先 ID のみを返すことです。次のクエリを使用します:

<code class="language-sql">SELECT contactid
WHERE flag = 'Volunteer'
AND flag = 'Uploaded'</code>
ログイン後にコピー

各条件は特定のフラグ値のみをチェックするため、結果は返されません。必要なデータを取得するには、別の方法を使用する必要があります。

GROUP BY と HAVING を使用します

解決策の 1 つは、GROUP BY 句と HAVING 句を使用することです。次のクエリは、結果を contactid ごとにグループ化し、一致するフラグ値の数をカウントします:

<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>
ログイン後にコピー

「ボランティア」フラグと「アップロード済み」フラグの両方が付いているコンタクトは 2 としてカウントされます。次に、HAVING 句によって結果がフィルタリングされ、これらの連絡先のみが含まれるようになります。

接続を使用する

もう 1 つの方法は、接続を使用することです。次のクエリは、your_table テーブルで自己結合を実行します:

<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>
ログイン後にコピー

このクエリは、「Volunteer」フラグと「Uploaded」フラグの両方を持つすべての連絡先の組み合わせを含む一時テーブルを作成します。次に、WHERE 句によって結果がフィルター処理され、これら 2 つの条件を満たす連絡先のみが含まれます。

メソッドの選択

同じ列で複数の条件を持つレコードを選択する最良の方法は、データのサイズと構造によって異なります。一致基準の長いリストを含む大規模なデータ セットの場合は、GROUP BY および HAVING ソリューションの方が効率的である可能性があります。一致基準のリストが短い小さなデータ セットの場合は、JOIN ソリューションの方が高速な場合があります。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート