Oracle - 如何在除BLOB之外的所有字段上执行SELECT DISTINCT?

时间:2014-11-03 19:26:17

标签: oracle select blob distinct

我正在尝试在Oracle中执行SELECT DISTINCT查询,如下所示:

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

它不起作用,因为列“IMAGES.IMAGE”是BLOB。我想从DISTINCT中排除这个字段(因为我不需要它是唯一的),我不知道如何。我也尝试使用GROUP BY子句,但是如果我尝试在除BLOB之外的所有字段上进行GROUP,则Oracle会返回此错误:

  

ORA-00979:不是GROUP BY表达式

如果我在GROUP BY子句中添加字段,那么Oracle会返回:

  

ORA-00932:不一致的数据类型:预期 - 获得BLOB

我该怎么办?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

Distinct应用于SELECT列表中的所有列。是的,你不能在GROUP BY,UNION,DISTINCT等中使用LOB,因为Oracle不知道如何比较不同的LOB

如果你想要检索BLOB,你可以尝试这样的事情:

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;  

但是你应该明白你在寻找什么。例如,上面的查询将除BLOB列之外的所有列分组,按两列排序,并为组中的每一行分配行号。生成的查询仅检索每个组中的第一行