根据一列删除 Select 查询中的重复项

Kam*_*ami 0 sql t-sql sql-server

我想选择没有重复的ids 并保留行'5d'而不是'5e'在 select 语句中。

桌子

id | name
1  | a
2  | b
3  | c
5  | d
5  | e
Run Code Online (Sandbox Code Playgroud)

我试过:

SELECT id, name 
FROM table t
INNER JOIN (SELECT DISTINCT id FROM table) t2 ON t.id = t2.id
Run Code Online (Sandbox Code Playgroud)

sti*_*bit 5

对于给定的示例,使用聚合min()可以工作。

SELECT id,
       min(name) name
       FROM table
       GROUP BY id;
Run Code Online (Sandbox Code Playgroud)


GMB*_*GMB 5

您还可以使用ROW_NUMBER()

SELECT id, name
FROM (
    SELECT id, name, ROW_NUMBER() OVER(PARTITION BY id ORDER BY name) rn 
    FROM mytable
) x
WHERE rn = 1
Run Code Online (Sandbox Code Playgroud)

这将保留具有最小的记录name(因此'5d'将出现在 之前'5e')。通过这种技术,您还可以在存在重复项的另一列上使用排序条件(聚合查询MIN()无法做到这一点)。此外,使用窗口函数的查询通常比等效的聚合查询执行得更好。