104 – Se l’istruzione ORDER BY include l’operatore UNION, INTERSECT o EXCEPT, gli elementi dell’istruzione devono essere specificati nell’elenco di selezione.

0
(0)

In questa pagina

Messaggio

Codice: 104

Descrizione in italiano: Se l’istruzione ORDER BY include l’operatore UNION, INTERSECT o EXCEPT, gli elementi dell’istruzione devono essere specificati nell’elenco di selezione.

Descrizione in inglese: ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.

Spiegazione

Mentre in una query senza UNION, INTERSECT o EXCEPT è possibile fare un ORDER BY per un campo che non è presente nella lista del SELECT, quando si fanno operazioni su insiemi di dati il campo con cui si sta ordinando deve essere presente nel SELECT.

Causa

Uno dei campi con cui si sta ordinando un recordset non è presente nei campi dell’istruzione SELECT.

Esempio:

SELECT Nome, Cognome
FROM Anagrafica
ORDER BY CodiceFiscale

Il codice qui sopra funziona perché il piano di esecuzione fa prima l’ordinamento e poi la selezione dei campi.

SELECT Nome, Cognome
FROM Anagrafica
UNION
SELECT Nome, Cognome
FROM Utenti
ORDER BY CodiceFiscale

Il piano di questa query dovrebbe essere di ordinare per codice fiscale il recordset Anagrafica e il recordset Utenti e poi unisce i due recordset:

  1. SELECT Nome, Cognome FROM Anagrafica
  2. SELECT Nome, Cognome FROM Utenti
  3. UNION di 1. e 2.
  4. ORDER BY

Ma a questo punto ORDER BY non ha a disposizione il campo CodiceFiscale!

Questa query quindi restituirebbe un errore 104.

Soluzione

Soluzione 1: non ordinare per il campo che non è presente nella SELECT

Esempio:

SELECT Nome, Cognome
FROM Anagrafica
UNION
SELECT Nome, Cognome
FROM Utenti
ORDER BY CodiceFiscale

Soluzione 2: esporre il campo da ordinare da tutti gli insiemi

Esempio:

SELECT Nome, Cognome, CodiceFiscale
FROM Anagrafica
UNION
SELECT Nome, Cognome, CodiceFiscale
FROM Utenti
ORDER BY CodiceFiscale

Soluzione 3: creare una sub-query con il campo e poi non esporlo

Esempio:

SELECT Nome, Cognome FROM (
  SELECT Nome, Cognome, CodiceFiscale
  FROM Anagrafica
  UNION
  SELECT Nome, Cognome, CodiceFiscale
  FROM Utenti
  ORDER BY CodiceFiscale
) a

Hai trovato utile questo contenuto?

Valutazione: 0 / 5. Voti: 0

Vota per primo questo contenuto

Ci dispiace che tu abbia trovato inutile o sbagliato questo contenuto

Lasciaci un messaggio

Come possiamo migliorare?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Moderazione dei commenti attiva. Il tuo commento non apparirà immediatamente.