SQL更改数据相同的列的数据

SQL更改数据相同的列的数据,sql,postgresql,join,sql-update,Sql,Postgresql,Join,Sql Update,我已创建此表: 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 ImportaVio

我已创建此表:

     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
        );
使用这个表,我创建了这个表:

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
    );
因此,现在我想更改名为importavillions的原始表中的数据,并将此表中的列id_serial更新为表Proces2的rn列,但仅在信息完全相同的地方

我已经完成了下一个查询,但它不起作用

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
);
是的,列id_serial作为一个空列存在于ImportaViolations表中,该列充满了null值。此外,我必须指出,importavillions表中没有主键,因此我不介意在不同的行上设置id_序列重复值


谢谢你的帮助

在Postgres的SQL中,您不必重复目标表的名称,也可以在没有中间临时表的情况下执行相同的工作:

从ImportaIV来看,Proces2 p2是一个carthesian产品,Proces2的子查询是不相关的。顺便说一句:您的意图不是很清楚。是否要为重复项指定一个列组号?:请注意,目标表不得出现在from_列表中,除非您打算进行自联接
UPDATE ImportaViolations  iv
SET id_serial = p2.rn
FROM Proces2 p2
WHERE iv.id_importat = p2.id_aux2
        AND iv.driver_city = p2.city_aux2
        AND iv.driver_state = p2.state_aux2
        AND iv.gender = p2.g_aux2
        AND iv.race = p2.r_aux2
        ;