Visualizzazione dei risultati da 1 a 9 su 9

Discussione: problemi con query

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    517

    problemi con query

    Salve ragazzi, ho un problema con questa query:
    codice:
    select * from magazzino_materie_prime where nome_materia_prima=(select nome_materia_prima from elenco_materie_prime where reparto_utilizzatore='7')
    L'errore rilevato è questo:
    -#1242 - Subquery returns more than 1 row

    Ma non riesco a capirne il motivo, forse può essere che dalla query anidata ritorno più di un valore?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469

    Re: problemi con query

    Originariamente inviato da il pupo
    Salve ragazzi, ho un problema con questa query:
    codice:
    select * from magazzino_materie_prime where nome_materia_prima=(select nome_materia_prima from elenco_materie_prime where reparto_utilizzatore='7')
    L'errore rilevato è questo:
    -#1242 - Subquery returns more than 1 row

    Ma non riesco a capirne il motivo, forse può essere che dalla query anidata ritorno più di un valore?
    esattamente.
    se torna più di una riga devi usare IN anzichè = (estremamente inefficiente con mysql)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    517
    grazie
    franzauker , funziona ...Per curiosità perchè è inefficiente quello che avevo scritto io ?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da il pupo
    grazie
    franzauker , funziona ...Per curiosità perchè è inefficiente quello che avevo scritto io ?
    mysql è stupido e riesegue per ogni riga della select esterna la select interna.
    Ovvero NON funziona come si potrebbe pensare, eseguendo una singola volta la query interna, sostituendo le righe ritornate.

    Questo (in mysql) è veloce
    codice:
    select * from blablabla where campo IN (1,2,10,5,100,1000,20,50...)
    questo invece è lento
    codice:
    select * from blablabla where campo IN (select blablabla...)
    anzi è superlento fino a mysql 5.5, lento per 5.6
    ---
    Va quindi bene se la query interna è piccola (veloce e ritorna poche righe), e la query esterna non ha molte righe a sua volta.

    se puoi, lato applicazione, è comune fare due query diverse
    1) quella interna, con un GROUP_CONCAT che ti ritorna le chiavi dei record, parcheggiate in una stringa, un array etc.
    2) la query esterna dove c'è IN (stringasalvataprima)

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    517
    grazie mille per la dritta, allora userò due query separate pechè dovrà ritornare molte righe

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da il pupo
    grazie mille per la dritta, allora userò due query separate pechè dovrà ritornare molte righe
    fai attenzione che se son davvero tante potresti superare la dimensione del "pacchettone" e saresti punto e a capo (o lo ingrandisci o spezzi la query)

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    517
    cioè?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da il pupo
    cioè?
    esiste una dimensione massima per il "pacchettone" logico di dati che server mysql e client si scambiano (circa 1MB, dipende dalla versione e dalla configurazione).
    Non puoi spedire in un colpo solo più di quei dati (se non ne aumenti la dimensione)

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    517
    ah ok ok... grazie mille

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 © 2026 vBulletin Solutions, Inc. All rights reserved.