複数の列に基づいて一意の行を効率的に選択します
データテーブルを操作する場合、多くの場合、特定の条件に基づいて一意の行のみを取得する必要があります。この例の目標は、2 つの列の一意の組み合わせを持つテーブルからすべての行を選択することです。
元のアプローチは、DISTINCT
句と IN
句の組み合わせを使用して一意の行を識別することでした。
<code class="language-sql">UPDATE sales SET status = 'ACTIVE' WHERE id IN (SELECT DISTINCT (saleprice, saledate), id, count(id) FROM sales HAVING count = 1)</code>
ただし、より効率的で信頼性の高い方法は、GROUP BY
句を使用することです。
<code class="language-sql">SELECT DISTINCT a,b,c FROM t</code>
これは次と同等です:
<code class="language-sql">SELECT a,b,c FROM t GROUP BY a,b,c</code>
GROUP BY
句は、指定された列 (この場合は saleprice
と saledate
) ごとに行をグループ化し、重複する行を削除します。次のクエリにより、望ましい結果が得られます:
<code class="language-sql">UPDATE sales SET status='ACTIVE' WHERE id IN ( SELECT id FROM sales S INNER JOIN ( SELECT saleprice, saledate FROM sales GROUP BY saleprice, saledate HAVING COUNT(*) = 1 ) T ON S.saleprice=T.saleprice AND s.saledate=T.saledate )</code>
このクエリは、saleprice
と saledate
に基づいて一意の販売行を識別し、それらのステータスを「アクティブ」に更新します。サブクエリは、GROUP BY
句と HAVING
句を使用して、saleprice
と saledate
の一意の組み合わせを選択します。
以上がSQL の複数の列に基づいて個別の行を効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。