Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie kann ich ein SELECT DISTINCT für alle Felder außer einem BLOB durchführen?

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

Distinct wird auf alle Spalten der SELECT-Liste angewendet. Und ja, Sie können keine LOBs in GROUP BY, UNION, DISTINCT usw. verwenden, da Oracle nicht weiß, wie man verschiedene LOBs vergleicht

Wenn Sie auch BLOB abrufen möchten, können Sie Folgendes versuchen:

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;  

Aber Sie sollten verstehen, wonach Sie suchen. Beispielsweise gruppiert die obige Abfrage alle Spalten außer einer BLOB-Spalte, ordnet sie nach etwa zwei Spalten an und weist jeder Zeile in der Gruppe eine Zeilennummer zu. Die resultierende Abfrage ruft nur die erste Zeile in jeder Gruppe ab