Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [mysql]insert con subquery select

    Avrei bisogno di capire come fare una query come questa ma che funzioni :

    INSERT INTO tabella1 (val1, val2, val3)
    VALUES ('pippo', 'pluto', (SELECT val4
    FROM tabella2
    WHERE val4 = 1))

    in sostanza una INSERT dove un valore è preso da una subquery SELECT.
    Il problema è che la Select ritorna più di un valore e mysql mi dà errore "Subquery returns more than 1 row".
    L'alternativa sarebbe gestire tutto con un array da php e fare la insert per ogni valore dell'array ma preferirei fare tutto con una singola query...
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Non ho capito...è normale che la SELECT debba darti più di un risultato?

    E poi la subquery SELECT che fai non ha senso:

    SELECT val4 FROM tabella 2 WHERE val4 = 1
    ti dara' N volte val4 con sempre valore 1 (N = numero di volte in cui val4 vale 1)

    Forse non ho capito cosa vuoi fare, ma cosi non ha molto senso....a meno che tu non voglia semplicemente contare le occorrenze di val4 = 1, ma allora forse è meglio se usi un COUNT.

    In ogni caso se correggi quella SELECT ma vuoi cmq un solo risultato puoi usare LIMIT 1




  3. #3
    ho scritto velocemente un esempio simbolico...
    devo fare una insert dove uno dei valori esce da una select che ritorna più di un valore. Quindi tante insert quanti i valori ritornati dalla select. In oracle si farebbe con un cursore...in mysql non sò...

    INSERT INTO tabella1 (val1, val2, val3)
    VALUES ('pippo', 'pluto', (SELECT val4
    FROM tabella2
    WHERE val5 = 1))

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Impensabile farlo in SQL puro.
    Non conosco Oracle, ma in genere l'utilizzo di un "cursore" implica l'uso di un linguaggio esterno. Ed è esattamente quello che dovrai fare qui, come hai ipotizzato nel primo post.

  5. #5
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Ah ok allora ci siamo...pero' ancora non mi hai dato l'info più importante:

    è normale che la SELECT dia più di un risultato? se si...quale devi prendere? il primo? l'ultimo? il più alto? il più basso?

    facendo due esempi:

    IL PRIMO:
    Codice PHP:
    INSERT INTO tabella1 (val1val2val3)
    VALUES ('pippo''pluto', (SELECT val4 FROM tabella2 WHERE val5 1 LIMIT 1)) 
    IL MASSIMO
    Codice PHP:
    INSERT INTO tabella1 (val1val2val3)
    VALUES ('pippo''pluto', (SELECT MAX(val4FROM tabella2 WHERE val5 1)) 
    etc...

  6. #6
    ok, come temevo...ti ringrazio...

  7. #7
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Originariamente inviato da luca200
    Impensabile farlo in SQL puro.
    Non conosco Oracle, ma in genere l'utilizzo di un "cursore" implica l'uso di un linguaggio esterno. Ed è esattamente quello che dovrai fare qui, come hai ipotizzato nel primo post.
    non conoscendo Oracle non avevo capito una cippa. Scusami ^^'


  8. #8
    Originariamente inviato da Il_Drugo
    Ah ok allora ci siamo...pero' ancora non mi hai dato l'info più importante:

    è normale che la SELECT dia più di un risultato? se si...quale devi prendere? il primo? l'ultimo? il più alto? il più basso?
    come scritto sopra:

    Originariamente inviato da technoZeuS
    devo fare una insert dove uno dei valori esce da una select che ritorna più di un valore. Quindi tante insert quanti i valori ritornati dalla select.
    è corretto ritorni più valori...

    l'unica pare essere gestire in php un vettore...

  9. #9
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Non l'avevo letto...

    Si temo abbia proprio ragione luca200...e da quanto leggo in giro...ha spesso ragione


  10. #10
    ok, grazie mille...ufff...

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.