基於多列高效選擇唯一行
在處理資料表時,經常需要根據特定條件僅檢索唯一行。在本例中,目標是從表中選擇兩列組合唯一的全部行。
最初的方法是使用 DISTINCT
和 IN
子句的組合來識別唯一行:
UPDATE sales SET status = 'ACTIVE' WHERE id IN (SELECT DISTINCT (saleprice, saledate), id, count(id) FROM sales HAVING count = 1)
然而,更有效且可靠的方法是使用 GROUP BY
子句:
SELECT DISTINCT a,b,c FROM t
這等效於:
SELECT a,b,c FROM t GROUP BY a,b,c
GROUP BY
子句按指定的列(在本例中為 saleprice
和 saledate
)將行分組,並消除重複行。以下查詢將實現所需結果:
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 )
此查詢根據 saleprice
和 saledate
識別唯一的銷售行,並將它們的狀態更新為「ACTIVE」。子查詢使用 GROUP BY
和 HAVING
子句選擇 saleprice
和 saledate
的唯一組合。
以上是如何在SQL中有效率地基於多列選擇不同的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!