2017-12-07 4 views
0

Abfrage:Warum funktioniert mein DISTINCT ON-Ausdruck nicht?

SELECT DISTINCT ON (geom_line),gid 
FROM edge_table; 

ich eine Kantentabelle haben, die Duplikate enthält, und ich will doppelte Kanten einer von ihnen zu entfernen, zu halten, aber die Syntax selbst ist falsch?

+1

'SELECT DISTINCT EIN (geom_line) geom_line, gid FROM edge_table;' Lesen: http://www.postgresqlforbeginners.com/2010/11/sql-distinct-distinct-on-and-all.html – aaa

Antwort

1

Das Komma ist das Problem.

Wenn Sie geom_line im Ergebnis enthalten möchten, verwenden Sie

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

Else verwenden

SELECT DISTINCT ON (geom_line) gid FROM edge_table; 

Aber wenn Ihr Ziel nur um Duplikate zu entfernen ist, würde ich sagen, dass Sie verwenden sollten

SELECT DISTINCT geom_line, gid FROM edge_table; 

DISTINCT garantiert Einzigartigkeit über das gesamte Ergebnis se t, während DISTINCT ON Eindeutigkeit über den Ausdruck in Klammern garantiert. Wenn mehrere Zeilen vorhanden sind, in denen der Ausdruck in Klammern identisch ist, wird eine dieser Zeilen ausgewählt. Wenn Sie eine ORDER BY Klausel haben, wird die erste Zeile ausgewählt.

DISTINCT a, b ist das gleiche wie DISTINCT ON (a, b) a, b.

+0

was ist das Grundlegende Unterschied zwischen deutlich auf und deutlich allein? –

+0

Ich habe die Antwort erweitert, um das zu erklären. –