2012-04-10 14 views
0

Hier ist das Szenario: Ich habe 2 Tabellen und 2 temporäre Tabellen. Bevor ich Benutzerdaten in die offiziellen Tabellen einfüge, füge ich sie in eine temporäre Tabelle ein, damit sie die Überprüfungen durchführen können. Es gibt eine company Tabelle mit Unternehmensinformationen und eine contact Tabelle mit Kontaktinformationen. Die Tabelle contact hat ein Feld mit der Bezeichnung company_id, das ein Fremdschlüsselindex für die Tabelle company ist.MySQL - Einfügen mit Fremdschlüssel Index

Temp-Tabellen werden auf die gleiche Weise eingerichtet.

Ich mag wie etwas tun: INSERT INTO company() SELECT * FROM temp_company; und INSERT INTO contact() SELECT * FROM temp_contact

Meine Frage ist, wie kann ich den Fremdschlüssel aus den temp_company auf die neu eingefügte ID auf der company Tabelle mit einer Anweisung wie folgt übertragen? Gibt es einen Weg, es zu tun?

Derzeit ich bin:

  1. die temporären Reihen greifen
  2. gehen eins nach dem anderen und sie
  3. packte den letzten Einsatz id Einfügen
  4. dann Einsetzen der Kontakte anschließend mit dem neuen letzten Einsatz id

Ich weiß nur nicht, ob das der effizienteste Weg ist. Vielen Dank!

Antwort

0

Wenn Sie die gleiche Anzahl von Spalten in beiden Tabellen haben und dann sollten Sie nur die Syntax verwenden können, die Sie dort haben? Nehmen Sie einfach die () heraus. So stellen Sie sicher, es gibt keinen doppelten Primärschlüssel:

INSERT INTO company SELECT * FROM temp_company; 
INSERT INTO contact SELECT * FROM temp_contact; 

Sie können auch angeben, speziell die Spalten, die eingefügt bekommen, auf diese Weise Sie genau angeben können, welche Spalte Sie als neue ID einfügen.

INSERT INTO company (`ID`,`col_1`,...,`last_col`) SELECT `foreign_key_col`,`col_1`,...,`last_col` FROM temp_company; 
INSERT INTO contact (`ID`,`col_1`,...,`last_col`) SELECT `foreign_key_col`,`col_1`,...,`last_col` FROM temp_contact; 

Stellen Sie nur sicher, dass Sie die richtige Anzahl an Spalten auswählen.

+0

Das einzige Problem ist, dass ich keine leere Tabelle mit den Temp-Tabellendaten bevölkert. Ich füge Zeilen zu einer Tabelle hinzu, die bereits eine Menge Daten enthält. –

+0

Richtig, das sollte in Ordnung sein, ist das Problem, dass Sie nicht wissen, ob Sie doppelte Schlüssel vor dem Einfügen haben? Wenn dies der Fall ist, können Sie die 'INSERT ... ON DUPLICATE KEY UPDATE'- oder 'INSERT ... ON DUPLICATE KEY INGNORE'-Syntax verwenden, je nachdem, was Sie tun möchten. –