Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307

    MySQL: INSERT di un singolo campo recuperato da una SELECT

    Buonasera a tutti,
    voglio usare un'unica query per inserire, in una tabella di MySQL, dei valori recuperati da un'altra tabella con una SELECT.
    Poiché debbo usare una query di aggregazione, non posso farmi restituire un unico campo, quindi se non ne ho compreso male la sintassi non posso usare una INSERT INTO ... SELECT
    Vi è un modo?

  2. #2
    Non credo esista un'alternativa all'INSERT ... SELECT con unica query.

    Ma in realta' nella tua domanda non si comprende per bene quale sia il problema. Forse un esempio potrebbe aiutare entrambi.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307
    Originariamente inviato da piero.mac
    Non credo esista un'alternativa all'INSERT ... SELECT con unica query.

    Ma in realta' nella tua domanda non si comprende per bene quale sia il problema. Forse un esempio potrebbe aiutare entrambi.
    Sì, scusa.
    Recupero un campo field1 da una SELECT con la seguente query:

    SELECT field1, COUNT(field1) AS AggrName FROM table1 GROUP BY field1 HAVING AggrName> 10 ORDER BY field1

    Vorrei usare una INSERT INTO ... SELECT per inserire i field1 restituiti dalla query nel campo field2 di una table2, ma a quanto sembra, INSERT INTO ... SELECT funziona solo se la SELECT restituisce UN campo.
    Vi è una via alternativa?

  4. #4
    insert ... select, se nel caso, ti copia tutta la tabella e anche piu' tabelle. Quello che limita e' il raggruppamento che ti rende una sola riga per condizione di raggruppamento.

    Tanto per verificare prova la seguente query:

    codice:
    create table ciccio
    SELECT field1, COUNT(field1) AS AggrName 
    FROM table1 
    GROUP BY field1 
    HAVING AggrName> 10 
    ORDER BY field1
    
     -- e poi 
    
    select * from ciccio
    ma quando parli di "inserire" in un campo ti riferisci forse a qualcosa di esistente? Occhio perche' allora sarebbe un UPDATE e non un insert, con tutt'altra sintassi

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Ciao,
    INSERT INTO ... SELECT funziona solo se la SELECT restituisce UN campo
    Funziona se il numero di campi restituiti dalla select è identico al numero di campi della tabella in cui vuoi inserire i dati.
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  6. #6
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307
    ma quando parli di "inserire" in un campo ti riferisci forse a qualcosa di esistente? Occhio perche' allora sarebbe un UPDATE e non un insert, con tutt'altra sintassi
    No, devo prendere solo il primo campo e fare una INSERT di tutti i valori restituiti in una tabella esistente. Non si tratta di una UPDATE.

    E, NO, la SELECT usa due campi, ed io ne devo inserire uno solo.

    Certo che se fosse lecita una sintassi del tipo

    SELECT field1
    FROM table1
    GROUP BY field1
    HAVING COUNT(field1) > 10
    ORDER BY field1

    sarebbe tutto a posto. Ma NON lo è.

  7. #7
    codice:
    INSERT INTO tabella2(field2) SELECT field1 FROM (SELECT field1, COUNT(field1) AS AggrName FROM table1 GROUP BY field1 HAVING AggrName> 10 ORDER BY field1) AS temp_tabella
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  8. #8
    chi ti capisce???

    Perche' prendi due campi se ne serve uno solo?

    puoi sempre decidere tu quali campi inserire.

    codice:
    INSERT INTO TABLE (nome_colonna)
    select nome_colonna ....
    
    ecc....
    ovviamente, come ti e' stato gia' detto: se selezioni un campo inserisci un campo, se ne selezioni due ne devi inserire due.... ma mi pareva proprio del tutto ovvio.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Originariamente inviato da natasha
    Certo che se fosse lecita una sintassi del tipo

    SELECT field1
    FROM table1
    GROUP BY field1
    HAVING COUNT(field1) > 10
    ORDER BY field1

    sarebbe tutto a posto. Ma NON lo è.
    perche' non e' lecita????

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307
    Originariamente inviato da piero.mac
    perche' non e' lecita????
    Se la eseguo in MySQL (notare che uso la versione 4) mi dà syntax error.
    Per la HAVING vuole forzosamente un nome, non un'espressione calcolata.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.