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

    [sql] porre a zero un campo in una select

    Vi scrivo perchè ho un dubbio, ci sono alcune query che sto facendo in cui dice tipo "sommare la quantità di articoli per ciascun ordine e dove non ce ne sono porre a 0 la qunatità ordinata".

    Il problema è quel "porre a 0", io con prove a casaccio su mysql mi sono accorto che se fai una select del tipo:

    Select codice, 0 from articoli;

    Praticamente associa ad ogni codice il valore zero.

    Il dubbio mio è che magari non è sql standard ed al professore non vada bene (essendo un esame di sql, ed uso mysql giusto per verificare gli esercizi che svolgo).

    Secondo voi la mia solzione è sql standard? altrimenti come si potrebbe fare?

    Vi ringrazio in anticipo,
    Neptune.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Immagino che intenda di usare un left join e la funzione coalesce() per porre a 0 i NULL.

  3. #3
    Qualcosa tipo

    SELECT IF(Articolo=NULL, 0, SUM(Importo)) FROM Ordine

    La sintassi "dovrebbe" funzionare con un altro database, non so se è lo stesso per MySQL.
    In pratica seleziona: SE l'Articolo è nullo dovrebbe trattarlo come identità e dare zero altrimenti se l'articolo non è nullo fa la somma degli importi. Penso di aver detto una grande cavolata, ma tu prova...

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da Lord Skass
    Qualcosa tipo

    SELECT IF(Articolo=NULL, 0, SUM(Importo)) FROM Ordine

    La sintassi "dovrebbe" funzionare con un altro database, non so se è lo stesso per MySQL.
    In pratica seleziona: SE l'Articolo è nullo dovrebbe trattarlo come identità e dare zero altrimenti se l'articolo non è nullo fa la somma degli importi. Penso di aver detto una grande cavolata, ma tu prova...
    Al massimo IS NULL.

    Alternative in mysql:

    codice:
    sum(coalesce(campo,0))
    sum(if(campo is null,0,campo))
    sum(ifnull(campo,0))
    La funzione coalesce() però è standard ANSI.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da nicola75ss
    Al massimo IS NULL.
    questa è una osservazione sottile, ma utilissima, anzi indispensabile per i novizi.

    In mysql (e tanti altri rdbms, per la verità) non si può confrontare null con qualcosa, 0, "", e neppure con null stesso

    qualcosa = NULL? mai

    Bisogna proprio usare IS NULL

  6. #6
    Ma io con la query sopra scritta in mysql già faccio il mio lavoro, il punto è che vorrei sapere se in SQL quello che ho scritto è sempre valido o meno, altrimenti come si potrebbe fare.

    Perchè l'esame che devo dare è di SQL non di mysql, quindi se gli faccio una query che poi non è sql.. potrebbe mandarmi a monte l'esame. E sul libro di testo non sto trovando nulla a riguardo.

    La situazione tipo in cui mi si presenta questo problema è quando ad esempio ho una tabella articoli ed una ordini e tramite un join devo vedere ad esempio quanti articoli sono stati ordinati. Gli articoli che non hanno ordini non vengono selezionati prorpio quindi devo operare mediante una union per settare quelli nulli (rifaccio magari una left join e seleziono i nulli con is null appunto) e impostarli a zero. Il punto è che in SQL e non MYSQL non so come dirgli semplicemente "Impostami questa colonna a tutti valori 0".
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da Neptune
    Perchè l'esame che devo dare è di SQL non di mysql, quindi se gli faccio una query che poi non è sql.. potrebbe mandarmi a monte l'esame. E sul libro di testo non sto trovando nulla a riguardo.
    Sempre ottimista e sereno.
    Cosa non ti è chiaro di:

    La funzione coalesce() però è standard ANSI.
    ?

  8. #8
    Originariamente inviato da nicola75ss
    Sempre ottimista e sereno.
    Cosa non ti è chiaro di:



    ?
    Piccolo dubbio.. è SQL-2?
    Perchè temo che sia SQL-3 e in alcune tracce di esame che ho trovato c'è specificatamente scritto in SQL-2
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da Neptune
    Il punto è che in SQL e non MYSQL non so come dirgli semplicemente "Impostami questa colonna a tutti valori 0".
    update tabella set importo=0 where importo is null

  10. #10
    MySql l'ho utilizzato raramente. Grazie della dritta comunque.

    Comunque MySQL, tralsciando le funzioni, non penso abbia una grande differenza dal SQL standard.

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.