복붙노트

[SQL] PostgreSQL을 다른 테이블의 컬럼이있는 테이블의 열을 업데이트

SQL

PostgreSQL을 다른 테이블의 컬럼이있는 테이블의 열을 업데이트

나는 다른 테이블의 표 2의 한 열을 val2에 테이블 표 중 하나 열 VAL1에서 모든 값을 복사 할. 나는 PostgreSQL의이 명령을 시도 :

update table2
set val2 = (select val1 from table1)

그러나 나는이 오류가 발생했습니다 :

그렇게 할 수있는 대안이 있습니까?

해결법

  1. ==============================

    1.귀하의 UPDATE 질의는 다음과 같이한다 :

    귀하의 UPDATE 질의는 다음과 같이한다 :

    UPDATE table2 t2
    SET    val2 = t1.val1
    FROM   table1 t1
    WHERE  t2.table2_id = t1.table2_id
    AND    t2.val2 IS DISTINCT FROM t1.val1;  -- optional, see below
    

    당신이 그것을 가지고하는 방법은 두 테이블의 개별 행 사이에 링크가 없었다. 모든 행은 표 2의 모든 행에 대해 표에서 가져온 것입니다. 이것은 (비싼 방법으로) 아무 의미하지,이 자리에 부질의 표현식이 단일 값을 반환 할 수 있기 때문에 또한, 구문 오류를 트리거.

    나는 table2_id에있는 두 개의 테이블을 조인함으로써이 문제를 해결했습니다. 실제로 두 가지를 링크 무엇 이건이를 교체합니다.

    그 크기 순서에 의해 일반적으로 빠르고 때문에, 대신에 상관 하위 쿼리를 실행 (FROM 절과) 표에 가입하는 UPDATE를 다시 썼다. 또한 일치하는 행이 표에서 발견되지 않는 곳 table2.val2이 무효가 될 수 없습니다. 대신, 아무것도 쿼리의 형태와 같은 행에 발생하지 않습니다.

    당신은 일반 SELECT에서와 같이 목록에서 표 식을 추가 할 수 있습니다 (테이블, 서브 쿼리, 집합을 돌려주는 기능, ...). 수동 :

    거의 항상 좋은 생각이다 (거의 전체 비용하지만 이득, 이국적인 예외 적용) - 아무것도 변하지 않을 것 절 방지 업데이트가 WHERE 마지막. 이전 및 새 값이 NOT NULL을 보장하는 경우,하는 단순화 :

    AND   t2.val2 <> t1.val1
    
  2. ==============================

    2.업데이트 표 1 세트 table1_column = 표 2 표 2에서 table2.column과 같은 곳 table1_id = table2.id

    업데이트 표 1 세트 table1_column = 표 2 표 2에서 table2.column과 같은 곳 table1_id = table2.id

  3. from https://stackoverflow.com/questions/13473499/update-a-column-of-a-table-with-a-column-of-another-table-in-postgresql by cc-by-sa and MIT license