2009-03-06 10 views
10

Ho bisogno di inserire una riga in una tabella, con un valore di campo calcolato da un'altra tabella. Piuttosto che fare due domande e rischiare una condizione di gara, ho pensato che sarebbe stato meglio fare tutto in una sola dichiarazione.Posso utilizzare una sottoquery in un'istruzione INSERT?

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

... ma questo non funziona. C'è un modo per ottenerlo in una dichiarazione? In caso contrario, qual è la tua raccomandazione?

risposta

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

Non sapevo che i dati "SELECT" erano arbitrari. Grande!! – Triztian

5

La tua sottoquery deve essere racchiusa tra parentesi. Questo codice dovrebbe funzionare:

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