2009-03-06 7 views
10

J'ai besoin d'insérer une ligne dans une table, avec une valeur de champ étant calculée à partir d'une autre table. Plutôt que de faire deux requêtes et risquer une condition de course, j'ai pensé qu'il serait mieux de tout faire en une seule déclaration.Puis-je utiliser une sous-requête dans une instruction INSERT?

INSERT INTO `myTable` (`someData`, `averageAtThisTime`) 
VALUES (
    "some stuff", 
    SELECT AVG(`myField`) FROM `myOtherTable` 
) 

... mais cela ne fonctionne pas. Y a-t-il un moyen de parvenir à cela dans une déclaration? Si non, quelle est votre recommandation?

Répondre

23
INSERT INTO `myTable` (`someData`, `averageAtThisTime`) 
select "some stuff", AVG(`myField`) 
FROM `myOtherTable` 
+0

Je ne savais pas que vous arbitraire 'SELECT' données. Génial!! – Triztian

5

Votre sous-requête doit être placée entre parenthèses. Ce code devrait fonctionner:

INSERT INTO `myTable` (`someData`, `averageAtThisTime`) 
VALUES (
"some stuff", 
(SELECT AVG(`myField`) FROM `myOtherTable`) 
); 
Questions connexes