📜  SQL |删除重复而不显着

📅  最后修改于: 2022-05-13 01:55:11.304000             🧑  作者: Mango

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;