我正在尝试在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
我该怎么办?
提前感谢您的帮助!
答案 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列之外的所有列分组,按两列排序,并为组中的每一行分配行号。生成的查询仅检索每个组中的第一行