2012-02-23 35 views
37

MySQL Come si INSERISCE IN una tabella con una subquery SELECT che restituisce più righe?MySQL Come si INSERIRE IN una tabella con una subquery SELECT che restituisce più righe?

INSERT INTO Results 
    (
    People, 
    names, 
    ) 
    VALUES 
    (
    (
     SELECT d.id 
     FROM Names f 
     JOIN People d ON d.id = f.id 
    ), 

    (
     "Henry" 
    ), 
    ); 

ho VOGLIO per popolare la nuova tabella con tutti i risultati di ritorno da questo subquery. Come faccio a fare questo senza ottenere un ERROR 1242 (21000): sottoquery restituisce più di 1 fila

+1

È possibile utilizzarlo con una procedura che utilizza un ciclo per tutti gli elementi da inserire. –

+0

Sono un newb MySQL, come si fa a ripetere un risultato? – stackoverflow

+0

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html – Michas

risposta

88
INSERT INTO Results (People, names) 
    SELECT d.id, 'Henry' 
    FROM Names f 
    JOIN People d ON d.id = f.id 

Unire la stringa statica Henry con il SELECT query.

+0

Cosa succede se ho più nomi? Non solo "Henry" e ho bisogno di _iterate_ su di loro. –

6
INSERT INTO Results 
    (
    People, 
    names, 
    ) 
    SELECT d.id, 'Henry' 
    FROM Names f 
    JOIN People d ON d.id = f.id 
+0

Che lavoro fai http://decoding.wordpress.com/2008/10/11/sql-server-insert-into-with-subquery/ – stackoverflow

+0

ho modificato il post – triclosan

8
INSERT INTO Results 
    (
    People, 
    names, 
    ) 
    VALUES 
    (
    (
     SELECT d.id 
     FROM Names f 
     JOIN People d ON (d.id = f.id) limit 1 
    ), 

    (
     "Henry" 
    ), 
    ); 
+8

Benvenuti in Stack Overflow! Piuttosto che pubblicare solo un blocco di codice, per favore * spiega * perché questo codice risolve il problema posto. Senza una spiegazione, questa non è una risposta. –

+1

Questo in realtà non risponde alla domanda. Era "[...] _popola la nuova tabella con ** tutti i risultati ** che tornano da questa subquery_", e questo limita i risultati della sottoquery a una riga. (So ​​che questa risposta ha più di 4 anni, ma ho pensato di farlo notare comunque). – MJV

5

Ecco quello che ho trovato che funziona bene. È un po 'lungo ma molte volte i dati extra devono essere mescolati.

Inserire più righe nella tabella1 da tabella2 con i valori. ESEMPI:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT col1,col2,col3,col4,col5 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional); 

È possibile inserire difficile valori codificati per ottenere inserire più righe con dati di ripetizione:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT "Value", col2, col3, "1900-01-01","9999-12-31" 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional); 

Nota che: "Valore", "1900-01-01", "9999- 12-31 "si ripeterà su tutte le righe inserite.

-1

inserire in ec_element (parentid, nome) selezionare elementid, 'STARTUP' da ec_element dove nome = 'BG';

l'istruzione di inserimento accetta valori elementid dalla tabella trovata con condizione soddisfatta e una stringa di etichetta.