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
;