Ich verwende postgreSQL 9.1 und ich möchte Duplikate aus meiner Tabelle löschen, diesen Tipp mit: https://stackoverflow.com/a/3822833/2239537PostgreSQL mit-löschen „Beziehung existiert nicht“
Also, meine Abfrage sieht wie folgt aus:
WITH cte
AS (SELECT ROW_NUMBER()
OVER (PARTITION BY code, card_id, parent_id
ORDER BY id DESC) RN
FROM card)
DELETE FROM cte
WHERE RN > 1
Aber es zeigt mir
ERROR: relation "cte" does not exist
SQL state: 42P01
Character: 157
Allerdings funktioniert diese Aussage fein:
WITH cte
AS (SELECT ROW_NUMBER()
OVER (PARTITION BY code, card_id, parent_id
ORDER BY id DESC) RN
FROM merchantcard)
SELECT * FROM cte
WHERE RN > 1
Irgendwelche Ideen, wie es funktioniert? Danke!
Wow, vielen Dank für die schnelle Antwort und nützliche Antwort! Arbeitete für mich, musste nur "löschen von der Karte" hinzufügen, aber das ist nur ein Tippfehler, natürlich. –
@AlexKartischev ja, danke, aktualisiert –
Die erste Lösung scheint alle Zeilen in der Tabelle für mich zu löschen. Ich verstehe das Verhalten von cte nicht: Wenn ich 'count (1) von cte where rn> 1 'wähle, bekomme ich die richtige Zahl, aber' zähle count (1) von der Karte wo ID in (wähle id aus cte wo rn> 1) 'gibt alle Zeilen zurück –