九月 6, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的UPDATE
连接语法,根据另一个表中的值更新表中的数据。
目录
PostgreSQL UPDATE 连接语法简介
有时,您需要根据另一个表中的值更新表中的数据。在这种情况下,您可以使用 PostgreSQL 的 UPDATE 连接语法,如下所示:
UPDATE t1
SET t1.c1 = new_value
FROM t2
WHERE t1.c2 = t2.c2;
要在UPDATE
语句中连接到另一个表,您可以在FROM
子句中指定连接的表并在WHERE
子句中提供连接条件。FROM
子句必须紧接在SET
子句之后出现。
对于表t1
的每一行,UPDATE
语句检查表t2
的每一行。如果表t1
的c2
列中的值等于表t2
的c2
列中的值,则UPDATE
语句将表t1
的c1
列中的值更新为新值 (new_value
)。
PostgreSQL UPDATE JOIN 示例
让我们看一个示例来了解 PostgreSQL 的UPDATE
连接的工作原理。我们将使用以下数据库表进行演示:
首先,创建一个新表,名为product_segment
,用于存储包括超豪华、豪华和大众在内的产品细分。
product_segment
表有一个discount
列存储基于特定细分市场的折扣百分比。例如,超豪华细分市场的产品有5%
折扣,而豪华和大众产品则分别有6%
和10%
折扣。
CREATE TABLE product_segment (
id SERIAL PRIMARY KEY,
segment VARCHAR NOT NULL,
discount NUMERIC (4, 2)
);
INSERT INTO
product_segment (segment, discount)
VALUES
('Grand Luxury', 0.05),
('Luxury', 0.06),
('Mass', 0.1);
其次,创建另一个名为product
的表来存储产品数据。product
表具有链接到segment
表的id
列的外键列 segment_id
。
CREATE TABLE product(
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL,
price NUMERIC(10,2),
net_price NUMERIC(10,2),
segment_id INT NOT NULL,
FOREIGN KEY(segment_id) REFERENCES product_segment(id)
);
INSERT INTO
product (name, price, segment_id)
VALUES
('diam', 804.89, 1),
('vestibulum aliquet', 228.55, 3),
('lacinia erat', 366.45, 2),
('scelerisque quam turpis', 145.33, 3),
('justo lacinia', 551.77, 2),
('ultrices mattis odio', 261.58, 3),
('hendrerit', 519.62, 2),
('in hac habitasse', 843.31, 1),
('orci eget orci', 254.18, 3),
('pellentesque', 427.78, 2),
('sit amet nunc', 936.29, 1),
('sed vestibulum', 910.34, 1),
('turpis eget', 208.33, 3),
('cursus vestibulum', 985.45, 1),
('orci nullam', 841.26, 1),
('est quam pharetra', 896.38, 1),
('posuere', 575.74, 2),
('ligula', 530.64, 2),
('convallis', 892.43, 1),
('nulla elit ac', 161.71, 3);
第三步,假设您必须根据产品细分市场的折扣来计算每种产品的净价。为此,您可以应用UPDATE
join 语句,如下所示:
UPDATE product
SET net_price = price - price * discount
FROM product_segment
WHERE product.segment_id = product_segment.id;
您可以利用表别名来简化查询,如下所示:
UPDATE
product p
SET
net_price = price - price * discount
FROM
product_segment s
WHERE
p.segment_id = s.id;
该语句将product
表与product_segment
表连接起来。如果两个表中存在匹配项,则会从product_segment
表中获取折扣,根据以下公式计算净价,并更新net_price
列。
net_price = price - price * discount;
以下 SELECT 语句检索product
表的数据以验证更新:
SELECT * FROM product;
如您所见,net_price
列已更新为正确的值。
在本教程中,您学习了如何使用 PostgreSQL 的UPDATE
join 语句,根据另一个表中的值更新表中的数据。