2017-12-25 13 views
0

SQL의 현재 질문에 대한 답변을 찾을 수 없으므로 누군가가 나를 도와 줄 수 있기를 바랍니다.SQLPro 또는 PostgreSQL 이전 행 값을 기준으로 행을 업데이트하는 SQL

나는 클라이언트로 SQLPro와 MySQL을 사용하고 또는 내가 이전 not null valuenull 값을 업데이트하려고 PostgreSQL을 pgAdmin 4.

시나리오를 사용할 수 있습니다.

primary_id name address id 
1   bob 123 main 100 
2   jane 123 main NULL 
3   mike 217 2nd 200 
4   jeff 217 2nd NULL 

enter image description here

가 어떻게이 address/ID 그룹 내 열을 일정하게 아래로 유지되도록 not null valuesnull 값을 채울 수 있습니다 : 여기

내 테이블?

감사합니다. 테이블을 업데이트하려면

답변

0

,이 포스트 그레스에서 작동합니다 :

update t 
    set id = (select t2.id 
       from t t2 
       where t2.address = t.address and t2.id is not null 
       fetch first 1 row only 
      ) 
    where id is null; 

는 MySQL의에서이 작동합니다

update t join 
     (select address, max(id) as max_id 
     from t 
     group by address 
     ) tt 
     on t.address = tt.address 
    set t.id = tt.max_id 
    where t.id is null; 
+0

안녕 내가 작업 솔루션을 얻으려고 노력하고 작업을 수행하는 동안 한 내 예제 테이블에서 그것은 실제 테이블에서 작동하지 않습니다 .... 내 검색어 : 업데이트 패밀리 조인 (home_street에서 패밀리 그룹의 max_id (max_ account_id) 선택) tt on family.home_street = tt.home_street family.account_id = tt.max_id를 설정합니다. 여기서 family.account_id는 null입니다. 오류는 있지만 아무 것도 업데이트되지 않습니다 ... account_id 값은 다음과 같습니다 : 0011I00000EWWDD 테이블에 약 78 개의 열이있어 차이가 있는지 확실하지 않습니다. 무엇이 잘못 되었나요? 감사합니다. – DavidO

+0

@DavidO. . . 문자 세트가 사용되기 때문에 주소는 * 같아 보이지만 여전히 다를 수 있습니다. –

+0

감사합니다! 도움을 감사하십시오! – DavidO

0

당신은 그 자체로 테이블을 갱신 시도 할 수 있습니다. 그래서 생각 나는 모든 널이 아닌 모든 주소와 ID 그룹이 (가정 주소가 항상 동일한 ID로 짝을 잡고 있다는 점이다

UPDATE users 
    SET 
    id = _users.id 
FROM 
(
    SELECT DISTINCT 
    address, 
    id 
    FROM users 
    WHERE id IS NOT NULL 
    GROUP BY 
     address, 
     id 
) _users 
WHERE 
    _users.address = users.address 
    AND users.id IS NULL; 

I 전화 : 내가 포스트 그레스에서 만든 사용자 테이블에 테이블을 삽입했다. 원래 users.address이 _users.

일치 _users.address. 당신은 단지 NULL의 users.id를 업데이트되어 있는지 확인합니다.

+0

재미있는 감사합니다! 덕분에 – DavidO

+0

! 이것은 포스트그레스의 매력처럼 도움을 주셔서 감사합니다! – DavidO