2009-03-06 10 views
10

Necesito insertar una fila en una tabla, con un valor de campo que se calcula desde otra tabla. En lugar de hacer dos consultas y arriesgar una condición de carrera, pensé que sería mejor hacerlo todo en una sola declaración.¿Puedo usar una subconsulta dentro de una instrucción INSERT?

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

... pero esto no funciona. ¿Hay alguna manera de lograr esto en una declaración? Si no, ¿cuál es su recomendación?

Respuesta

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

No sabía que tenía datos 'SELECT' arbitrarios. ¡¡Estupendo!! – Triztian

5

Su subconsulta debe estar entre paréntesis. Este código debería funcionar:

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