In questa pagina
Messaggio
Codice: 145
Messaggio in italiano: Se si specifica SELECT DISTINCT, gli elementi ORDER BY devono essere inclusi nell’elenco di selezione.
Messaggio in inglese: ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
Spiegazione
Mentre in una query senza DISTINCT nel SELECT è possibile fare un ORDER BY per un campo che non è presente nella lista del SELECT, quando si fanno operazioni su insiemi di dati distinti il campo con cui si sta ordinando deve essere presente nel SELECT.
Il piano di esecuzione di una query senza DISTINCT esegue prima l’ORDER BY e successivamente il SELECT, ma se è specificato DISTINCT avverrebbe un ordinamento ulteriore tra l’ORDER BY e il SELECT:
- SELECT dati FROM tabella
- ORDER BY campo
- calcola il DISTINCT:
- ordina per campi esposti
- salta i valori duplicati
Causa
Nella query è presente un campo dell’ORDER BY che non è presente nell’elenco dei campi del SELECT DISTINCT.
Esempio:
SELECT DISTINCT Nome, Cognome FROM Anagrafica ORDER BY Cognome, Nome
Questa query funziona, perché nell’ORDER BY sono presenti solo campi che sono anche nel SELECT DISTINCT.
SELECT DISTINCT Nome, Cognome FROM Anagrafica ORDER BY CodiceFiscale
Questa query non funziona e restituisce l’errore 145, perché il campo CodiceFiscale non è presente nel SELECT DISTINCT
Soluzione
Soluzione 1: non ordinare per il campo che non è presente nella SELECT DISTINCT
Esempio:
SELECT DISTINCT Nome, Cognome FROM AnagraficaORDER BY CodiceFiscale
Soluzione 2: esporre il campo da ordinare
Esempio:
SELECT DISTINCT Nome, Cognome, CodiceFiscale FROM Anagrafica ORDER BY CodiceFiscale