基于多列高效选择唯一行
在处理数据表时,经常需要根据特定条件仅检索唯一行。在本例中,目标是从表中选择两列组合唯一的全部行。
最初的方法是使用 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
识别唯一的销售行,并将它们的状态更新为“ACTIVE”。子查询使用 GROUP BY
和 HAVING
子句选择 saleprice
和 saledate
的唯一组合。
以上是如何在SQL中高效地基于多列选择不同的行?的详细内容。更多信息请关注PHP中文网其他相关文章!