나는이 photos
내가 데이터를 필터링하여 다른 테이블에서 새 열을 삽입하는 것을 시도하고있는에 테이블 WHERE
절을. 실행하려는 쿼리는 다음과 같습니다.
ALTER TABLE photos ADD COLUMN new_count BIGINT;
INSERT INTO photos (new_count)
SELECT c.cnt
FROM c
WHERE
c.created = photos.created;
하지만 결과적으로 오류가 발생합니다.
Error : ERROR: invalid reference to FROM-clause entry for table "photos"
LINE 5: c.created = photos.created
오류를 피하고 열을 복사하려면 어떻게해야합니까?
PostgreSQL 9.4를 사용하고 있습니다.
참조 된 테이블에 가입 c
A를 FROM
절.
UPDATE photos p
SET new_count = c.cnt
FROM c
WHERE c.created = p.created
AND c.cnt IS NOT NULL; -- optional, depends on additional circumstances
(같은 상관 서브 쿼리 @Andomar 의해 입증는 ) 일반적으로 느리고, 그들은 또한이 부작용이 통상적으로 바람직있다 :
일치하는 행에서 발견되지 않으면 c
1, UPDATE
없이 진행하여 new_count
NULL로 설정된다. 이것은 이 특정 경우에 잘못된 것이 아닙니다 (케이스의 정의에 따라 열이 NULL이기 때문에). 여전히 무의미한 추가 비용입니다. 그러나 종종 그 효과는 적극적으로 해 롭습니다.
추가 된 조건 AND c.cnt IS NOT NULL
은 새 값이 이전 값과 다르지 않은 경우 빈 업데이트를 방지합니다. c.cnt
NULL 일 수 없으면 쓸모 가 없습니다. 일반 검사의 단순화 된 형태 : AND c.cnt IS DISTINCT FROM p.new_count
. 세부 정보 (마지막 단락) :
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다