2009-05-13 10 views
18

Comment écrire une instruction INSERT si j'obtiens les valeurs de colA de TableX, colB de TableY et colC de TableZ?SQL: INSERT INTO ... VALUES..SELECT

par exemple: INSERT INTO TableA (IVC, colB, colC) VALEURS

Toutes les idées s'il est possible (?,??)?

+0

est-ce Java? coutures d'être un problème SQL simple, ou ai-je raté quelque chose? –

+0

Java tag semble être ajouté par accident, je vais voir si je peux l'enlever – Andomar

+0

Qu'est-il arrivé à l'affiche originale? Pas de pts. Une chance qu'un administrateur puisse sélectionner une réponse ici? –

Répondre

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

Bien sûr, TableX, et TABLEY TAbleZ pourraient être liés aussi d'une autre manière (pas INNER JOIN).

Si vous ne trouvez aucune relation entre les tables AT ALL, vous pouvez aussi faire trois séparés

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

puis un insert comme celui-ci:

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

C'est le dernier recours ultime, vous ne peut pas tout exprimer dans une seule déclaration SELECT.

Marc

+0

la valA, valB, valC est de différentes tables ... –

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

Doit être les noms de colonnes comme sont dans le tableau A. Il n'y a rien de mal à

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

ok..grande ... je l'utilise en Java, donc si colC obtient les valeurs d'une méthode (par exemple: méthode())? –

+0

Désolé, je ne fais pas Java –

22

En réponse à la réponse de marc_s, vous pouvez interroger à partir de tables non liées depuis un certain temps comme:

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

+1 - bonne réponse - merci! Vous apprenez quelque chose de nouveau tous les jours .... –

Questions connexes