IT/SQL

[PostgreSQL] [limit] 분할 삭제,분할 업데이트

나무정원 2021. 12. 27. 15:50

A에는 있고, B에는 없는 대상을 찾는다.

그 결과를(A에만 있는영역)  A에서 삭제하는 쿼리

limit 으로 100,000만건씩 제거한다.

select table1 A 
left join table2 B 
on A.key = B.key
where B.key is NULL

 

delete 

  from table1

where col1 in

(

     select a.col1

       from table1 a

      left outer join table2 b

       on a.col1 = b.col1

       where b.col1 is null

       limit 100000

);

 

delete ~ limit 1 은 먹히지 않았다.

select 문으로 한번 감싸줘야 처리됨

 

 

 

A.col1 B.col1
12345 12345
34567 NULL
NULL 98765

 

12345는 A와 B 둘다 있다.

34567은 A에는 있고, B에는 없다. (==> 위 조건에서 삭제되어야 할 대상)

98765는 B에만 있다. A기준 left join이므로, 위 데이터는 포함되지 않음

 

 

 


--특정조건(2021년 1월이전)  limit으로 분할하여 update

update table1

set col3= null

where col1 in 

 (

    select col1 

       from table1

       where reg_date <'2021-01-01'

         and col3 is not null

        limit 200000

);

 


 

-- limit 으로 분할하여 삭제처리

delete 

  from table1

where data in (select data from table1 limit 50000);