IT박스

sqlite 한 테이블에서 다른 테이블로 데이터 복사

itboxs 2020. 11. 17. 07:56
반응형

sqlite 한 테이블에서 다른 테이블로 데이터 복사


SQLITE

동일한 필드가있는 "Source"및 "Destination"테이블이 2 개 있습니다. ID 및 COUNTRY, 둘 다 공통되지 않는 다른 필드도 있습니다.

Source.Country 값을 ID에 조인이있는 Destination.Country에 복사해야합니다.

제 삶을 위해 저는 Sqlite가 이것을하게 만들 수 없습니다.

SQL Server 등에서 이것은 매우 간단한 작업입니다.

아이디어?


INSERT INTO Destination SELECT * FROM Source;

공식적인 정의는 SQLite가 이해 한 SQL : INSERT참조하십시오 .


두 테이블에 이미 데이터가 있고 일부 조건에 따라 테이블 열 값을 업데이트하려면 다음을 사용하십시오.

UPDATE Table1 set Name=(select t2.Name from Table2 t2 where t2.id=Table1.id)

나는 이것과 씨름 해 왔고 다른 옵션이 있다는 것을 알고 있지만 가장 안전한 패턴은 다음과 같다는 결론에 도달했습니다.

create table destination_old as select * from destination;

drop table destination;

create table destination as select
d.*, s.country
from destination_old d left join source s
on d.id=s.id;

destination변경하기 전에 복사본이 있기 때문에 안전 합니다. 조인이있는 업데이트 문은 강력하지만 약간 위험하기 때문에 SQLite에 포함되지 않은 것으로 생각됩니다.

위의 패턴을 사용하면 두 개의 country필드가 생성됩니다. 검색하려는 모든 열을 명시 적으로 지정 하고 필드 가 null 인 경우 값을 검색하는 데 destination_old사용하여 coalesce이를 방지 할 수 있습니다 . 예를 들면 다음과 같습니다.destination_oldcountrysource

create table destination as select
d.field1, d.field2,...,coalesce(s.country,d.country) country
from destination_old d left join source s
on d.id=s.id;

이와 같은 데이터를 복사하는 경우 데이터 모델이 완전히 정규화되지 않았 음을 의미 할 것입니다. 하나의 국가 목록을 만들고 JOIN을 더 할 수 있습니까?

JOIN 대신 가상 테이블을 사용할 수도 있으므로 시스템에서 쿼리를 변경할 필요가 없습니다.

참고 URL : https://stackoverflow.com/questions/4291165/sqlite-copy-data-from-one-table-to-another

반응형