gpt4 book ai didi

sql - 如何使用来自其他表的不同值更新多行?

转载 作者:搜寻专家 更新时间:2023-10-30 20:51:44 25 4
gpt4 key购买 nike

我有 3 个表,其中两个包含日期,最后一个试图从这些表中获取数据。但是,它的两个列(如果我们不计算 id 列)包含数据,只有这个表有。

因此,我正在尝试做的是通过多次更新从其他表导入数据,一次更新一列。

表格结构如下:

test1(
id_test1 serial NOT NULL,
typeactemariage character varying(200) NOT NULL,
datemariage character varying(200),
id_lieumariage integer,
id_conjoint integer,
id_beaupere integer,
id_bellemere integer,
CONSTRAINT test1_pkey PRIMARY KEY (id_test1)
)

test2
(
id_test2 serial NOT NULL,
ville character varying(200),
departement character varying(200) NOT NULL,
CONSTRAINT test2_pkey PRIMARY KEY (id_test2)
)

test3
(
id_test3 serial NOT NULL,
typeacte character varying(100) NOT NULL,
epoux character varying(100) NOT NULL,
prenomepoux character varying(100),
prenompereepoux character varying(100),
nommereepoux character varying(100),
prenommereepoux character varying(100),
epouse character varying(100),
prenomepouse character varying(100),
prenompereepouse character varying(100),
nommereepouse character varying(100),
prenommereepouse character varying(100),
lieu character varying(150) NOT NULL,
dept character varying(100) NOT NULL,
dates character varying(30),
numvue character varying(100),
CONSTRAINT test3_pkey PRIMARY KEY (id_test3)
)

test1 已经在 typeactemariagedatemariage 列(以及 id_test1)中有数据,并尝试从 test2 中获取数据(id_test2)(id_lieumariage) 列中。其他列目前仍为空。

这是我写的:

UPDATE
test1
SET
id_lieumariage = l.id_test2
FROM
test1 m,
test2 l,
test3 o
WHERE
o.id_test3 = m.id_test1
AND o.lieu = l.ville
AND o.dept = l.departement;

代码执行,该列有数据,但它只获取看到的第一个值(在第 1 行),这不是我想要的。有没有办法让它循环,对每一行进行更新?

谢谢!


编辑:我正在放我的 table 的照片,并会尝试更好地解释。

测试 1:http://puu.sh/scVCy/8479b7e4f2.png

测试 2:http://puu.sh/scVmL/901df2d74a.png

测试 3:http://puu.sh/scVoz/04be151c71.png

执行我的代码后的 test1:http://puu.sh/scVpC/3209b5f4a6.png

id_lieumariage 列用它获得的第一个值 1 填充自身。在我的代码中,我希望得到第一行的值为 1,第二行的值为 2,第三行的值为 3。

我有大约 100k+ 的值需要导入(我在这里只显示 3 行,以尝试简化我的示例)。

因此,我需要的是能够为每一行获取不同的 id_lieumariage 值。如果您不明白我的解释,请告诉我,我的英语不是很好。


编辑 2:我将提供我拥有的数据:

CREATE TABLE test1()
ALTER TABLE test1 ADD COLUMN id_test1 SERIAL PRIMARY KEY, ADD COLUMN typeactemariage VARCHAR(200) NOT NULL, ADD COLUMN datemariage VARCHAR(200), ADD COLUMN id_lieumariage INTEGER, ADD COLUMN id_conjoint INTEGER, ADD COLUMN id_beaupere INTEGER, ADD COLUMN id_bellemere INTEGER;

CREATE TABLE test2()
ALTER TABLE test2 ADD COLUMN id_test2 SERIAL PRIMARY KEY, ADD COLUMN ville VARCHAR(200), ADD COLUMN departement VARCHAR(200) NOT NULL*;

CREATE TABLE test3()
ALTER TABLE test3 ADD COLUMN id_test3 SERIAL PRIMARY KEY, ADD COLUMN typeacte VARCHAR(200) NOT NULL, ADD COLUMN epoux VARCHAR(200), ADD COLUMN prenomepoux VARCHAR(200), ADD COLUMN prenompereepoux VARCHAR(200), ADD COLUMN nommereepoux VARCHAR(200), ADD COLUMN prenommereepoux VARCHAR(200), ADD COLUMN epouse VARCHAR(200), ADD COLUMN prenomepouse VARCHAR(200), ADD COLUMN nommereepouse VARCHAR(200), ADD COLUMN prenommereepouse VARCHAR(200), ADD COLUMN lieu VARCHAR(200), ADD COLUMN dept VARCHAR(200), ADD COLUMN dates VARCHAR(200), ADD COLUMN numvue VARCHAR(200);

INSERT INTO test1(typeactemariage, datemariage, id_lieumariage, id_conjoint, id_beaupere, id_bellemere)
VALUES ('Contrat de mariage', '21/11/2016', NULL, NULL, NULL, NULL),
('Contrat de mariage', '25/11/2016', NULL, NULL, NULL, NULL)
('Contrat de mariage', '11/11/2016', NULL, NULL, NULL, NULL);

INSERT INTO test2(ville, departement)
VALUES('Royan', '17'),
('Rochefort', '17'),
('Aytre', '17');

INSERT INTO test3(typeacte, epoux, prenomepoux, prenompereepoux, nommereepoux, prenommereepoux, epouse, prenomepouse, prenompereepouse, nommereepouse, prenommereepouse, lieu, dept, dates, numvue)
VALUES ('Contrat de mariage', 'DUPOND', 'Loris', 'Jacques', 'Duponne', 'Jeanne', 'BOURDOIN', 'Manon', 'Dujonni', 'Jinny', 'Royan', '17', '11/11/2016', '10/70'),
('Contrat de mariage', 'DUPONT', 'Pierre', 'Jerome', 'Dupuits', 'Jeannette', 'BOURLIAN', 'Philippine', 'Marpa', 'Elisa', 'Rochefort', '17', '21/11/2016', '10/20'),
('Contrat de mariage', 'Tintin', 'Milou', 'Haddock', 'Bond', 'Barack', 'Dutroux', 'Anna', 'Trane', 'Melissa', 'Aytre', '17', '25/11/2016', '10/25');

在执行我的请求后我应该拥有的是以下内容:

test1 的行 (1) : 1,Contrat de mariage, 21/11/2016, 1, NULL, NULL, NULL

test1 的第 (2) 行:1,Contrat de mariage, 25/11/2016, 2, NULL, NULL, NULL

test1 的第 (3) 行:1,Contrat de mariage, 11/11/2016, 3, NULL, NULL, NULL

我得到的是:

test1 的行 (1) : 1,Contrat de mariage, 21/11/2016, 1, NULL, NULL, NULL

test1 的行 (2) : 1,Contrat de mariage, 25/11/2016, 1, NULL, NULL, NULL

test1 的第 (3) 行:1,Contrat de mariage, 11/11/2016, 1, NULL, NULL, NULL

我的代码正在执行的操作是获取它找到的第一个 l.id_test2,并将其放在每一行中。如果我将请求修改为:

UPDATE
test1
SET
id_lieumariage = l.id_test2
FROM
test1 m,
test2 l,
test3 o
WHERE
o.id_test3 = m.id_test1
AND o.lieu = l.ville
AND o.dept = l.departement
AND id_test1 = 2

然后,我得到的是:

test1 的行 (1) : 1,Contrat de mariage, 21/11/2016, 1, NULL, NULL, NULL

test1 的行 (2) : 1,Contrat de mariage, 25/11/2016, 1, NULL, NULL, NULL

test1 的第 (3) 行:1,Contrat de mariage, 11/11/2016, 1, NULL, NULL, NULL

如果您需要更多信息,请告诉我!

最佳答案

update test1 m
set id_lieumariage = l.id_test2
from
test3 o
inner join
test2 l on o.lieu = l.ville and o.dept = l.departement
where o.id_test3 = m.id_test1
;

table test1;
id_test1 | typeactemariage | datemariage | id_lieumariage | id_conjoint | id_beaupere | id_bellemere
----------+--------------------+-------------+----------------+-------------+-------------+--------------
1 | Contrat de mariage | 21/11/2016 | 1 | | |
2 | Contrat de mariage | 25/11/2016 | 2 | | |
3 | Contrat de mariage | 11/11/2016 | 3 | | |

关于sql - 如何使用来自其他表的不同值更新多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40513441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com