PostgreSQL UPDATE조인 구문을 사용하여 다른 테이블의 값을 기반으로 테이블의 데이터를 업데이트 하는 방법
UPDATE t1
SET t1.c1 = new_value
FROM t2
WHERE t1.c2 = t2.c2;
UPDATE 명령문의 다른 테이블에 조인하려면 FROM절에 조인된 테이블을 지정하고 절에 조인 조건을 제공합니다.
테이블의 각 행에 t1대해 UPDATE명령문은 테이블의 모든 행을 검사합니다.
c2의 값의 경우 t1 테이블의 열과 t2 테이블의 열이 일치한다면 c1으로 t1의 열을 new_value로 업데이트 합니다.
반응형
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);
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 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;
SELECT * FROM product;
반응형
'SW ENGINEERING > Postgres' 카테고리의 다른 글
[PostgreSQL] BASIC - Upsert (0) | 2021.09.06 |
---|---|
[PostgreSQL] BASIC - DELETE (0) | 2021.09.06 |
[PostgreSQL] BASIC - UPDATE (0) | 2021.09.06 |
[PostgreSQL] BASIC - INSERT Multiple Rows (0) | 2021.09.06 |
[PostgreSQL] BASIC - INSERT (0) | 2021.09.06 |
최근댓글