SQL |删除重复而不显着
DISTINCT 在某些情况下很有用,但它的缺点是它会增加查询引擎执行排序的负载(因为它需要将结果集与自身进行比较以删除重复项)
以下是替代解决方案:
1. 使用 Row_Number 删除重复项。
WITH CTE (Col1, Col2, Col3, DuplicateCount)
AS
(
SELECT Col1, Col2, Col3,
ROW_NUMBER() OVER(PARTITION BY Col1, Col2,
Col3 ORDER BY Col1) AS DuplicateCount
FROM MyTable
) SELECT * from CTE Where DuplicateCount = 1
2.使用自加入删除重复项
你的桌子
emp_name emp_address sex matial_status
uuuu eee m s
iiii iii f s
uuuu eee m s
SELECT emp_name, emp_address, sex, marital_status
from YourTable a
WHERE NOT EXISTS (select 1
from YourTable b
where b.emp_name = a.emp_name and
b.emp_address = a.emp_address and
b.sex = a.sex and
b.create_date >= a.create_date)
3. 使用 group By 删除重复项
这个想法是根据要在输出中选择的所有列进行分组。例如,如果我们希望打印“FirstName、LastName 和 MobileNo”的唯一值,我们可以简单地将这三个分组。
SELECT FirstName, LastName, MobileNo
FROM CUSTOMER
GROUP BY FirstName, LastName, MobileNo;