2013-03-20 14 views
36

C'è un modo per inserire i valori ei valori pre-impostati che ricevo da un prescelto-query? Per esempio:MySQL INSERT INTO ... VALORI e selezionare

INSERT INTO table1 VALUES ("A string", 5, [int]). 

ho il valore di "Una stringa" e il numero 5, ma ho per trovare il valore [int] da un prescelto come questo:

SELECT idTable2 
FROM table2 
WHERE ... 

che mi dà quell'id per mettere dentro la tabella1.

Come unire questo in una dichiarazione?

risposta

62

Utilizzare un insert ... select query e mettere i valori noti nel select:

insert into table1 
select 'A string', 5, idTable2 
from table2 
where ... 
+1

Un problema che ho trovato con questo approccio è che se il 'select' ritorna zero record allora l'istruzione ha esito positivo, ma non ci sono dati' INSERT'. –

+2

@ NeilC.Obremski: Sì, ma questo è solo un problema se ti aspetti che il risultato sia qualcos'altro. Se si desidera un errore in questo caso, è possibile utilizzare invece una sottoquery. – Guffa

+0

grazie mille, stavo setacciare internet per questo – ComradeJoecool

1

Provare quanto segue:

INSERT INTO table1 
SELECT 'A string', 5, idTable2 idTable2 FROM table2 WHERE ... 
46

basta utilizzare il subquery proprio lì come:

INSERT INTO table1 VALUES ("A string", 5, (SELECT ...)). 
+2

+1 per fornire un esempio di come farlo mentre si utilizza ancora la sintassi 'VALUES'. – EleventyOne

+1

questo metodo può dare un errore come "più di 1 riga" –

+5

Dovrebbe essere "INSERIRE nella tabella1 VALUES (" A string ", 5, (SELECT ... LIMIT 1))." – Rahnzo

0

Prova questo:

INSERT INTO table1 SELECT "A string", 5, idTable2 FROM table2 WHERE ... 
1
INSERT INTO table1 (col1, col2) 
SELECT "a string", 5, TheNameOfTheFieldInTable2 
FROM table2 where ... 
8

provare questo

INSERT INTO TABLE1 (COL1 , COL2,COL3) values 
('A STRING' , 5 , (select idTable2 from Table2)) 
where ... 
+4

Che dire di più colonne dalla tabella 'SELECT'? Se provo più di una colonna proveniente da lì, ottengo che "Operand dovrebbe contenere 1 colonna (s)". –

5

Tutte le altre risposte risolve il problema e la mia risposta funziona allo stesso modo come gli altri, ma solo su un più didatticamente modo (questo funziona su MySQL ... non so altri server SQL):

INSERT INTO table1 SET 
    stringColumn = 'A String', 
    numericColumn = 5, 
    selectColumn = (SELECT idTable2 FROM table2 WHERE ...); 

È possibile fare riferimento alla documentazione di MySQL: INSERT Syntax

10
 
INSERT INTO table_name1 
      (id, 
      name, 
      address, 
      contact_number) 
SELECT id, name, address, contact_number FROM table_name2; 
Problemi correlati