web-dev-qa-db-fra.com

SQL: INSERT IN ... VALUES..SELECT

Comment puis-je écrire une instruction INSERT si j'obtiens les valeurs de colA de Table, colB de TableT et colC de TableS?

exemple: INSERT INTO TableA (colA, colB, colC) VALEURS (?,?,?)

Des idées si c'est possible?

21
jenn
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, TableY et TAbleZ pourraient également être liés d'une autre manière (pas INNER JOIN).

Si vous ne trouvez aucune relation entre les tables AT ALL, vous pouvez également effectuer trois opérations distinctes.

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

et puis un insert comme ceci:

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

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

Marc

36
marc_s

En réponse à la réponse de marc_s, vous pouvez interroger des tables non liées dans une sélection depuis, comme:

INSERT INTO TableA
    (colA, colB, colC)
SELECT
    (SELECT valA FROM TableX WHERE ...),
    (SELECT valB FROM TableY WHERE ...),
    (SELECT valC FROM TableZ WHERE ...)
24
Andomar
Insert into TableA (ColA, ColB, ColC) . . .

Il doit s'agir des noms de colonne tels qu'ils figurent dans le tableau A . 

Insert into TableA (ColA, ColB, ColC) . . .
Select TableX.Col1, TableY.Col1, TableZ.Col5 
From TableX, TableY, TableZ
Where . . . 
4
Binary Worrier

Vous devrez joindre les tables dont vous voulez faire la sélection.

Voici une ressource sur les jointures SQL:

www.w3schools.com/sql/sql_join.asp

Vous voudrez peut-être consulter ce livre gratuit PDF des personnes de www.simple-talk.com qui couvre les bases de SQL:

Compendium de feuille de lit SQL Server

0
lexx