2009-05-13 25 views
18

Come si scrive INSERT se ottengo i valori di colA da TableX, colB da TableY e colC da TableZ?SQL: INSERT INTO ... VALUES..SELECT

ad esempio: INSERT INTO TableA (cola, COLB, colC) VALORI

Tutte le idee, se è possibile (?,?,?)?

+0

è questo Java? sembra essere un semplice problema SQL o mi sono perso qualcosa? –

+0

Il tag Java sembra essere aggiunto per errore, vedrò se riesco a rimuoverlo – Andomar

+0

Che cosa è successo al poster originale? No pts. Qualche possibilità che un amministratore possa selezionare una risposta qui? –

risposta

33
INSERT INTO TableA(colA, colB, colC) 
    SELECT TableX.valA, TableY.valB, TableZ.valC 
    FROM TableX 
    INNER JOIN TableY ON :...... 
    INNER JOIN TableZ ON ........ 

Naturalmente, TableX, Tabley e TAbleZ potrebbero anche essere collegati in qualche altro modo (non INNER JOIN).

Se non è possibile trovare alcuna relazione tra i tavoli a tutti, si potrebbe anche fare tre diversi

SELECT @value1 = valA FROM TableX WHERE ...... 
SELECT @value2 = valB FROM TableY WHERE ...... 
SELECT @value3 = valC FROM TableZ WHERE ...... 

e poi un inserto in questo modo:

INSERT INTO TableA(colA, colB, colC) 
      VALUES(@value1, @value2, @value3) 

Questo è l'ultimo ultima risorsa, è impossibile esprimere tutto in una singola istruzione SELECT.

Marc

+0

il valA, valB, valC proviene da diverse tabelle ... –

4
Insert into TableA (ColA, ColB, ColC) . . . 

Devono essere i nomi delle colonne come sono nella tabella A. Non c'è niente di sbagliato con

Insert into TableA (ColA, ColB, ColC) . . . 
Select TableX.Col1, TableY.Col1, TableZ.Col5 
From TableX, TableY, TableZ 
Where . . . 
+0

ok..great ... sto usando questo in java, quindi se colC sta ottenendo i valori da un metodo (es: method())? –

+0

Mi spiace, non lo faccio Java –

22

In risposta alla risposta di marc_s, è possibile eseguire query da tabelle non correlate in quanto selezionare:

INSERT INTO TableA 
    (colA, colB, colC) 
SELECT 
    (SELECT valA FROM TableX WHERE ...), 
    (SELECT valB FROM TableY WHERE ...), 
    (SELECT valC FROM TableZ WHERE ...) 
+4

+1 - ottima risposta - grazie! Si impara qualcosa di nuovo ogni giorno.... –

Problemi correlati