sqlite kopieer gegevens van de ene tabel naar de andere

SQLITE

Ik heb 2 tabellen “Bron” en “Bestemming” die dezelfde velden hebben. ID en LAND, hoewel ze allebei andere velden hebben die niet gemeenschappelijk zijn.

Ik moet de Source.Country-waarde kopiëren naar de Destination.Country waar de join op ID staat

Voor mijn leven kan ik Sqlite dit niet laten doen.

In SQL Server enz. is dit een supereenvoudige taak.

Ideeën?


Antwoord 1, autoriteit 100%

INSERT INTO Destination SELECT * FROM Source;

Zie SQL zoals begrepen door SQLite: INSERTvoor een formele definitie.


Antwoord 2, autoriteit 8%

Als u al gegevens in beide tabellen heeft en u wilt de waarden van een tabelkolom bijwerken op basis van een bepaalde voorwaarde, gebruik dan deze

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

Antwoord 3, autoriteit 3%

Ik heb hiermee geworsteld en ik weet dat er andere opties zijn, maar ik ben tot de conclusie gekomen dat het veiligste patroon is:

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;

Het is veilig omdat je een kopie van destinationhebt voordat je deze hebt gewijzigd. Ik vermoed dat update-instructies met joins niet in SQLite waren opgenomen omdat ze krachtig maar een beetje riskant zijn.

Als u het bovenstaande patroon gebruikt, krijgt u uiteindelijk twee country-velden. U kunt dat vermijden door expliciet alle kolommen te vermelden die u wilt ophalen uit destination_olden misschien coalescete gebruiken om de waarden op te halen uit destination_oldals de Het veld countryin sourceis null. Dus bijvoorbeeld:

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;

Antwoord 4

Als je op die manier data kopieert, betekent dat waarschijnlijk dat je datamodel niet volledig genormaliseerd is, toch? Is het mogelijk om één lijst met landen te maken en meer JOIN te doen?

In plaats van een JOIN kunt u ook virtuele tabellen gebruiken, zodat u de query’s in uw systeem niet hoeft te wijzigen.

Other episodes