none
Select distinct ?? RRS feed

  • Domanda

  • Ciao,

    Scusate sono niubbissimo ma avrei un problema:

    SQL Server 2005: Dovrei estrarre da UNA tabella vari campi dei record : Nome, Cognome, Indirizzo escludendo quelli con indirizzo ripetuto ( serve per realizzare etichette x spedizione postale).

    Ho provato  a fare una query:

    select distinct ( Indirizzo )

    Nome,
    Cognome,
    Indirizzo,
    IdNazione,
    Nazione

    from
    dbo.clienti,
    dbo.nazioni

    Where
    dbo.clienti.id_Naz = dbo.Nazioni.Id_Naz
    and
    dbo.clienti.E_mail is not NULL

    ---
    mi estrae, effettivamente, meno record ma nel campo Nome mi mette il valore degli indirizzi. Se Tolgo distinct (Indirizzi ) il campo Nome si popola correttamente.

    Dove sbaglio?

    Grazie

    mercoledì 29 agosto 2012 16:37

Risposte

  • Ciao,

    i campi da visualizzare devono essere separati da virgola. Nel tuo caso tra "select distinct (indirizzo)" e "Nome, Cognome, ...) mancando la virgola viene preso il campo indirizzo, mentre "Nome" viene utilizzato come alias, cioè come "titolo" personalizzato della colonna. Ecco perchè hai il campo Nome con i dati degli indirizzi!

    Per eliminare le righe doppie ti è sufficiente scrivere:

    select distinct
       Nome,
       Cognome,
       Indirizzo,
       IdNazione,
       Nazione
    from
       dbo.clienti
    inner join 
       dbo.nazioni on clienti.id_Naz = Nazioni.Id_Naz
    Where
       dbo.clienti.E_mail is not NULL

    In questo modo vengono eliminate le righe duplicate dal set di risultati, cioè quelle con tutti i campi identici.

    Puoi leggerti la sintassi completa del comando SELECT nei Books On Line (BOL), dove trovi anche diversi esempi.

    Nell'esempio qui sopra ho anche modificato la join  tra le tabelle: la sintassi che hai usato tu (FROM t1,t2 WHERE t1.campo = t2.campo) fa parte dello standard SQL-89, ormai deprecato, più complicato da leggere e che in certi casi produce risultati errati (ti suggerisco questo articolo di Aaron Bertrand che parla di questo argomento).

    HTH


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.

    • Contrassegnato come risposta Anca Popa martedì 4 settembre 2012 06:38
    giovedì 30 agosto 2012 06:39