为什么我的 DISTINCT ON 表达式不起作用?

Why doesn't my DISTINCT ON expression work?

查询:

SELECT DISTINCT ON (geom_line),gid 
FROM edge_table;

我有一条包含重复项的边 table,我想删除重复的边以保留其中一条,但语法本身是错误的?

逗号有问题。

如果您希望 geom_line 包含在结果中,请使用

SELECT DISTINCT ON (geom_line) geom_line, gid FROM edge_table;

否则使用

SELECT DISTINCT ON (geom_line) gid FROM edge_table;

但是如果你的objective只是为了删除重复项,我会说你应该使用

SELECT DISTINCT geom_line, gid FROM edge_table;

DISTINCT 保证整个结果集的唯一性,而 DISTINCT ON 保证括号中表达式的唯一性。如果有几行括号中的表达式相同,则选择其中一行。如果您有 ORDER BY 子句,将选择第一行。

DISTINCT a, b 等同于 DISTINCT ON (a, b) a, b.