2014-11-03 64 views
0

我試圖在甲骨文執行SELECT DISTINCT查詢,例如:Oracle - 如何在除BLOB之外的所有字段上執行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的所有領域,甲骨文返回此錯誤:

ORA-00979: not a GROUP BY expression

如果我添加字段在GROUP BY子句,則Oracle返回這個:

ORA-00932: inconsistent datatypes: expected - got BLOB

我該怎麼辦?

非常感謝您的幫助!

回答

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

區別應用於SELECT列表中的所有列。是的,你不能使用GROUP BY,UNION的LOB,DISTINCT等,因爲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列之外的所有列組合在一起,按兩列排序,併爲組中的每一行分配一個行號。生成的查詢只檢索每個組中的第一行

+0

謝謝!有用 ! – 2014-11-03 20:07:54

相關問題