リスト内のすべての項目に一致する行をフィルターします
「cars」と「passedtest」という 2 つのテーブルがあり、特定のテスト セットに合格した自動車を識別する方法が必要だとします。 「passedtest」テーブルには、各車両が合格したテストが記録されます。
これを実現する 1 つの方法は、IN ステートメントを使用することです。ただし、このメソッドは、指定されたリスト内のテストの 1 つにさえ合格した自動車を返すため、望ましい結果が得られない可能性があります。リスト内のすべての行のすべての値を一致させるには、別の解決策が必要です。
次の SQL クエリは、GROUP BY 句と HAVING 句を利用してこのタスクを実行します。
<code class="language-sql">SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = 4</code>
このクエリは、まず「passedtest」テーブル内の行を「carname」列ごとにグループ化します。次に、COUNT(DISTINCT) 関数を使用して、各車両の個別の「testtype」値の数を計算します。 HAVING 句は、結果をフィルタリングして、さまざまなテスト タイプの数が 4 に等しい自動車のみを選択するために使用されます (リストに 4 つのテストがあると仮定します)。
このクエリの結果をネストされたステートメントとして使用して、「cars」テーブルから追加情報を抽出することもできます。
<code class="language-sql">SELECT * FROM cars WHERE carname IN ( SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = 4 )</code>
この拡張クエリは、指定された基準を満たす車両の「cars」テーブルからすべての関連データを取得します。
以上がSQL を使用してリスト内のすべてのテストに合格した車を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。