2016-07-14 4 views
1

Ich muss eine Firma Tabelle umgestalten, so dass die Adressinformationen in eine dedizierte Adressentabelle verschoben wird.einfügen von einer anderen Tabelle und verknüpfen Tabellen dann von ID

Also ich denke, ich muss so etwas tun, um die neuen Adressdatensätze zu erstellen.

INSERT INTO address (city, country, ...) 
SELECT city,country, ... FROM company 

Aber wie aktualisiere ich die Firma Tabelle mit der ID der neu erstellten Adressdatensätze, um referenzielle Integrität zu erhalten?

Es gibt mehrere doppelte Adressen so kann ich nicht auf die Stadt kommen nur, Land Felder etc.

UPDATE

Wie von Juergen d angedeutet, die Art, wie ich diese Runde bekam ist eine temporäre zu erstellen company_id Spalt in der Adresstabelle:

ALTER TABLE address ADD company_id INTEGER 

INSERT INTO address (city,country,company_id) 
SELECT city,country,id from company 

UPDATE company c set c.address_id = (select a.id from address a where a.company_id = c.id) 

ALTER TABLE address DROP COLUMN company_id; 
+0

Danach verwenden Sie SELECT LAST_INSERT_ID() ', um die ID des neuen Datensatzes –

+0

wird LAST_INSERT_ID() nicht nur geben Sie mir die ID des letzten Datensatzes von der Anweisung eingefügt, unabhängig davon, wie viele eingefügt wurden? – beterthanlife

+0

Ja, ich habe deine Frage missverstanden. –

Antwort

0

könnten Sie einen company_id in Ihrer address Tabelle verwenden.

INSERT INTO address (company_id, city, country, ...) 
SELECT id, city, country, ... 
FROM company 

Dann gibt es keine Notwendigkeit, jede address_id zum company Tabelle hinzuzufügen.

+1

Mein Datenbankdesign ist besser geeignet für das Unternehmen, das die Eigentümerseite der Beziehung ist. Aber was ich tun kann, ist die Spalte company_id temporär zu erstellen, die Einfügung wie vorgeschlagen durchzuführen und dann die Firmastabelle mit der Spalte company_id zu aktualisieren, bevor sie gelöscht wird. Siehe mein Update. – beterthanlife

Verwandte Themen