데이터 입력 시점 gender
에서 레코드의 "알 수 없음"이 "알 수 없음" 이므로 일부 행이 더티 (dirty) 인 PostgreSQL 테이블이 있습니다.이 테이블은 항상 object_id
객체의 고유 식별자 인으로 표시된 것과 동일 합니다.
object_id gender
511E1AC7128EE2E74349896B55461F27 Unknown
511E1AC7128EE2E74349896B55461F27 Unknown
511E1AC7128EE2E74349896B55461F27 Male
56665EA256AB3757CDFA6C1CB4334C91 Female
56665EA256AB3757CDFA6C1CB4334C91 Female
56665EA256AB3757CDFA6C1CB4334C91 Unknown
56665EA256AB3757CDFA6C1CB4334C91 Unknown
55C3BFDBD327396E912604D6E635D59B Unknown
55C3BFDBD327396E912604D6E635D59B Unknown
55C3BFDBD327396E912604D6E635D59B Female
따라서 내 테이블을 다음과 같이 업데이트하고 싶습니다.
object_id gender
511E1AC7128EE2E74349896B55461F27 Male
511E1AC7128EE2E74349896B55461F27 Male
511E1AC7128EE2E74349896B55461F27 Male
56665EA256AB3757CDFA6C1CB4334C91 Female
56665EA256AB3757CDFA6C1CB4334C91 Female
56665EA256AB3757CDFA6C1CB4334C91 Female
56665EA256AB3757CDFA6C1CB4334C91 Female
55C3BFDBD327396E912604D6E635D59B Female
55C3BFDBD327396E912604D6E635D59B Female
55C3BFDBD327396E912604D6E635D59B Female
모든 "알 수없는"열이 object_id
/ some other entry /에있는 알 수없는 값으로 변환됩니다 . PostgreSQL에서이 작업을 수행 할 수있는 방법이 있습니까-또는-더 나은-Sequelize (SQL 데이터베이스 용 Javascript ORM?)
질문이 불완전하므로 현재 Postgres 버전 9.5와이 테이블 정의를 가정합니다.
CREATE TABLE object (
object_id uuid PRIMARY KEY -- ideally a UUID
, gender text -- could probably be boolean
-- rest irrelevant
);
그런 다음 해결책은 다음과 같습니다.
UPDATE object o
SET gender = sub.gender
FROM (
SELECT object_id, min(gender) AS gender
FROM object
GROUP BY 1
) sub
WHERE o.object_id = sub.object_id
AND o.gender IS DISTINCT FROM sub.gender;
집계 또는 창 함수는 UPDATE
직접 허용되지 않으므로 하위 쿼리가 필요합니다 .
집계 함수 min()
는 text
'Unknown'이 'Female' 및 'Male' 다음에 정렬 되기 때문에 작동합니다 . 또한 대한 작업 것이다 boolean
(여기서 '알 수없는'것 NULL
), 그리고 min()
하고 max()
무시 NULL
값을.
마지막 WHERE
조건은 선택 사항이지만 빈 업데이트를 방지하기 위해 포함하는 것이 좋습니다. o.gender <> sub.gender
열이 정의 된 경우 단순화 할 수 있습니다 NOT NULL
.
데이터 유형을 사용하는 것이 이상적인 이유는 무엇 uuid
입니까?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다