sql去除重復(fù)記錄有5種常用方法:distinct關(guān)鍵字,返回查詢結(jié)果中的唯一記錄;group by子句,分組并僅返回每個(gè)組中不重復(fù)的記錄;union all和distinct,合并多個(gè)查詢結(jié)果并去除重復(fù)記錄;not in子查詢,從一個(gè)表中去除與另一個(gè)表中重復(fù)的記錄;cte(公共表表達(dá)式),使用 row_number() 函數(shù)分配唯一序號(hào)來(lái)去除重復(fù)記錄。
SQL 中去除重復(fù)記錄的方法
在 SQL 中去除重復(fù)記錄是一種常見(jiàn)需求,可以提高數(shù)據(jù)質(zhì)量和性能。這里介紹幾種常用的方法:
1. DISTINCT 關(guān)鍵字
DISTINCT 關(guān)鍵字用于返回查詢結(jié)果中的唯一(不重復(fù))記錄。它可以與其他關(guān)鍵字一起使用,例如 SELECT、FROM 和 WHERE。
SELECT DISTINCT column_name FROM table_name;
登錄后復(fù)制
2. GROUP BY 子句
GROUP BY 子句將查詢結(jié)果分組,并僅返回每個(gè)組中不重復(fù)的記錄。可以結(jié)合聚合函數(shù)(例如 COUNT、SUM)使用。
SELECT column_name, COUNT(*) AS count FROM table_name GROUP BY column_name;
登錄后復(fù)制
3. UNION ALL 和 DISTINCT
UNION ALL 運(yùn)算符將多個(gè)查詢結(jié)果合并為一個(gè)結(jié)果集。結(jié)合 DISTINCT 可以去除重復(fù)記錄。
SELECT * FROM table_name UNION ALL SELECT * FROM table_name2 DISTINCT;
登錄后復(fù)制
4. NOT IN 子查詢
NOT IN 子查詢可以從一個(gè)表中去除與另一個(gè)表中記錄重復(fù)的記錄。
SELECT * FROM table_name WHERE column_name NOT IN (SELECT column_name FROM other_table);
登錄后復(fù)制
5. CTE(公共表表達(dá)式)
CTE 是一種臨時(shí)表,可以在查詢中多次引用。可以使用 ROW_NUMBER() 函數(shù)為每一行分配一個(gè)唯一序號(hào),然后使用它來(lái)去除重復(fù)記錄。
WITH RankedData AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY column_name ORDER BY id) AS row_num FROM table_name ) SELECT * FROM RankedData WHERE row_num = 1;
登錄后復(fù)制
選擇合適的方法
選擇哪種方法取決于數(shù)據(jù)集和查詢的具體要求。對(duì)于較小的數(shù)據(jù)集,DISTINCT 關(guān)鍵字或 GROUP BY 子句通常就足夠了。對(duì)于較大的數(shù)據(jù)集,CTE 或 NOT IN 子查詢可能更有效。