Oracle
 sql >> Database >  >> RDS >> Oracle

Come posso eseguire un SELECT DISTINCT su tutti i campi tranne un BLOB?

SELECT DISTINCT MOVIES.TITLE, CERTIFICATIONS.ID, PROJECTION.DAY, TIME_SLOTS.SLOT, PROJECTION.REMAINING_SEATS
FROM [...]

Distinct viene applicato a tutte le colonne dell'elenco SELECT. E sì, non puoi utilizzare LOB in GROUP BY, UNION, DISTINCT ecc. Perché Oracle non sa come confrontare diversi LOB

Se vuoi recuperare anche BLOB puoi provare qualcosa del genere:

SELECT MOVIES.TITLE, CERTIFICATIONS.ID, 
       PROJECTION.DAY, TIME_SLOTS.SLOT, PROJECTION.REMAINING_SEATS, IMAGES.IMAGE
FROM (     
  SELECT MOVIES.TITLE, CERTIFICATIONS.ID, 
         PROJECTION.DAY, TIME_SLOTS.SLOT, PROJECTION.REMAINING_SEATS, IMAGES.IMAGE,
         row_number() over (partition by MOVIES.TITLE, CERTIFICATIONS.ID, PROJECTION.DAY, TIME_SLOTS.SLOT, PROJECTION.REMAINING_SEATS 
                            order by PROJECTION.DAY, TIME_SLOTS.SLOT) RW
  FROM [...]
) WHERE RW = 1;  

Ma dovresti capire cosa stai cercando. Ad esempio, la query precedente raggruppa tutte le colonne tranne una colonna BLOB, ordinale in base a due colonne e assegna un numero di riga a ciascuna riga del gruppo. La query risultante recupera solo la prima riga di ogni gruppo