Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment puis-je effectuer un SELECT DISTINCT sur tous les champs sauf un BLOB ?

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

Distinct est appliqué à toutes les colonnes de la liste SELECT. Et oui, vous ne pouvez pas utiliser les LOB dans GROUP BY, UNION, DISTINCT etc car Oracle ne sait pas comment comparer différents LOB

Si vous souhaitez également récupérer BLOB, vous pouvez essayer quelque chose comme ceci :

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;  

Mais vous devez comprendre ce que vous cherchez. Par exemple, la requête ci-dessus regroupe toutes les colonnes à l'exception d'une colonne BLOB, les classe par deux colonnes environ et attribue un numéro de ligne à chaque ligne du groupe. La requête résultante récupère uniquement la première ligne de chaque groupe