반응형
하위 쿼리를 사용하여 postgres에서 테이블 행 업데이트
postgres 8.4를 사용하여 목표는 기존 테이블을 업데이트하는 것입니다.
CREATE TABLE public.dummy
(
address_id SERIAL,
addr1 character(40),
addr2 character(40),
city character(25),
state character(2),
zip character(5),
customer boolean,
supplier boolean,
partner boolean
)
WITH (
OIDS=FALSE
);
처음에는 insert 문을 사용하여 쿼리를 테스트했습니다.
insert into address customer,supplier,partner
SELECT
case when cust.addr1 is not null then TRUE else FALSE end customer,
case when suppl.addr1 is not null then TRUE else FALSE end supplier,
case when partn.addr1 is not null then TRUE else FALSE end partner
from (
SELECT *
from address) pa
left outer join cust_original cust
on (pa.addr1=cust.addr1 and pa.addr2=cust.addr2 and pa.city=cust.city
and pa.state=cust.state and substring(cust.zip,1,5) = pa.zip )
left outer join supp_original suppl
on (pa.addr1=suppl.addr1 and pa.addr2=suppl.addr2 and pa.city=suppl.city
and pa.state=suppl.state and pa.zip = substring(suppl.zip,1,5))
left outer join partner_original partn
on (pa.addr1=partn.addr1 and pa.addr2=partn.addr2 and pa.city=partn.city
and pa.state=partn.state and pa.zip = substring(partn.zip,1,5) )
where pa.address_id = address_id
초보자이기 때문에 업데이트 문으로 변환하는 데 실패했습니다. 즉, select 문에서 반환 된 값으로 기존 행을 업데이트합니다. 도움을 주시면 감사하겠습니다.
Postgres는 다음을 허용합니다.
UPDATE dummy
SET customer=subquery.customer,
address=subquery.address,
partn=subquery.partn
FROM (SELECT address_id, customer, address, partn
FROM /* big hairy SQL */ ...) AS subquery
WHERE dummy.address_id=subquery.address_id;
이 구문은 표준 SQL은 아니지만 표준 SQL보다이 유형의 쿼리에 훨씬 편리합니다. 나는 오라클이 적어도 비슷한 것을 받아들이라고 믿는다.
UPDATE FROM
구문 이 완성되었습니다.
UPDATE
table T1
SET
column1 = t2.column1
FROM
table t2
INNER JOIN table t3 USING (column2)
WHERE
t1.column2 = t2.column2;
참고 문헌
- 여기 코드 샘플 : UPDATE FROM 절의 GROUP BY
- 그리고 여기
- 공식 구문 사양
조인을 사용하여 성능이 향상되지 않으면 가독성을 위해 CTE (Common Table Expressions)를 선호합니다.
WITH subquery AS (
SELECT address_id, customer, address, partn
FROM /* big hairy SQL */ ...
)
UPDATE dummy
SET customer = subquery.customer,
address = subquery.address,
partn = subquery.partn
FROM subquery
WHERE dummy.address_id = subquery.address_id;
좀 더 현대적인 IMHO.
update json_source_tabcol as d
set isnullable = a.is_Nullable
from information_schema.columns as a
where a.table_name =d.table_name
and a.table_schema = d.table_schema
and a.column_name = d.column_name;
참고 URL : https://stackoverflow.com/questions/6256610/updating-table-rows-in-postgres-using-subquery
반응형
'Programing' 카테고리의 다른 글
Oracle의 테이블에서 중복 값을 어떻게 찾습니까? (0) | 2020.03.30 |
---|---|
도커 오류 : 장치에 남은 공간이 없습니다. (0) | 2020.03.30 |
인위적으로 연결 시간 초과 오류 생성 (0) | 2020.03.30 |
선택기가 null을 반환하는지 어떻게 알 수 있습니까? (0) | 2020.03.30 |
ID에 대한 Android 조각을 볼 수 없습니까? (0) | 2020.03.30 |