ich geschaffen habe diese Tabelle:SQL Daten ändern einer Spalte, in der Daten ist die gleiche
DROP TABLE IF EXISTS Proces1 CASCADE;
CREATE TABLE Proces1 AS
(
SELECT id_importat AS id_aux, driver_city AS city_aux,
driver_state AS state_aux, gender AS g_aux, race AS r_aux
FROM ImportaViolations
WHERE id_importat IN (
SELECT id_importat
FROM ImportaViolations
GROUP BY id_importat
HAVING (COUNT(*) > 1))
GROUP BY id_importat, driver_city, driver_state, gender, race
);
Und mit dieser Tabelle habe ich erstellt diese:
DROP TABLE IF EXISTS Proces2 CASCADE;
CREATE TABLE Proces2 AS
(
SELECT id_aux AS id_aux2, city_aux AS city_aux2, state_aux AS state_aux2,
g_aux AS g_aux2, r_aux AS r_aux2, rn
FROM (
SELECT id_aux, city_aux, state_aux,
g_aux, r_aux, row_number() OVER(PARTITION BY id_aux ORDER BY 1) AS rn
FROM Proces1
) d
WHERE rn > 1
);
So, jetzt will ich Ändern Sie Daten aus der Original-Tabelle namens "ImportaViolations", und ich möchte die Spalte "id_serial" aus dieser Tabelle in die Spalte "rn" der Tabelle "Proces2" aktualisieren, aber nur dort, wo Informationen genau gleich sind.
Ich habe die nächste Abfrage gemacht, aber es funktioniert nicht.
UPDATE ImportaViolations
SET id_serial = p2.rn
FROM ImportaViolations iv, Proces2 p2
WHERE (iv.id_importat, iv.driver_city, iv.driver_state, iv.gender, iv.race) IN (
SELECT id_aux2, city_aux2, state_aux2, g_aux2, r_aux2
FROM Proces2
);
Und ja, die Spalte „ID_SERIAL“ existiert auf dem Tisch ImportaViolations als eine leere Spalte (voller Nullwerte). Ich muss auch sagen, dass es keinen Primärschlüssel für die ImportaViolations-Tabelle gibt, so dass es mir nichts ausmacht, wenn wir die wiederholten Werte von id_serial auf verschiedenen Zeilen setzen.
Danke für Ihre Hilfe!
'VON ImportaViolations iv, Proces2 p2' ist ein kartesisches Produkt und die Unterabfrage 'FROM Proces2' ist unkorreliert.BTW: Ihre Absicht ist nicht sehr klar. Möchten Sie den Duplikaten eine Rangnummer geben? – wildplasser
[Zitat aus dem Handbuch] (https://www.postgresql.org/docs/current/static/sql-update.html): "* Beachten Sie, dass die Zieltabelle nicht in der from_list erscheinen darf, außer Sie beabsichtigen ein self -Beitreten*" –