Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como posso executar um SELECT DISTINCT em todos os campos, exceto um BLOB?

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

Distinto é aplicado a todas as colunas da lista SELECT. E sim, você não pode usar LOBs em GROUP BY, UNION, DISTINCT etc porque o Oracle não sabe comparar LOBs diferentes

Se você quiser recuperar o BLOB também, tente algo assim:
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;  

Mas você deve entender o que você está procurando. Por exemplo, a consulta acima agrupa todas as colunas, exceto uma coluna BLOB, ordene-as por cerca de duas colunas e atribua um número de linha a cada linha do grupo. A consulta resultante recupera apenas a primeira linha em cada grupo