【问题标题】:How can I perform a SELECT DISTINCT on all fields except a BLOB?如何在除 BLOB 之外的所有字段上执行 SELECT DISTINCT?
【发布时间】:2014-11-03 19:26:16
【问题描述】:

我正在尝试在 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

我能做什么?

【问题讨论】:

    标签: oracle select blob distinct


    【解决方案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 列之外的所有列进行分组,按两列对它们进行排序,并为组中的每一行分配一个行号。结果查询仅检索每个组中的第一行

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      相关资源
      最近更新 更多