Programing

하위 쿼리를 사용하여 postgres에서 테이블 행 업데이트

lottogame 2020. 3. 30. 08:42
반응형

하위 쿼리를 사용하여 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;

참고 문헌


조인을 사용하여 성능이 향상되지 않으면 가독성을 위해 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

반응형