选择多列,一列分组,涉及clob

时间:2018-11-05 02:30:33

标签: sql database oracle types

我想从3个表中选择多个列,并按self_object_id进行分组。列之一(gene_info)是CLOB类型。

我尝试对除self_object_id之外的每一列使用max(),但是我不能,因为该函数不适用于CLOB数据类型。我该如何解决?

SELECT gene_info, pi.id, race, id_card_no, sdg.create_datetime
FROM person_info pi, sample_info si, sample_dna_gene sdg
WHERE pi.id = si.self_object_id
AND si.self_object_id = sdg.sample_id
AND si.self_object_id IN ('34B00F424CFE4DA389A7F7914D54AA62','8EF79471D9A3481590BD4CA6FC09231E','43E85B5BC34  94EA6B71D3D289A3A8AF0')
GROUP BY self_object_id

1 个答案:

答案 0 :(得分:0)

首先,您不能GROUP BYCLOB。你就是不行您将必须找到其他方式来做到这一点。如果您的CLOBs短于4000个字符,则可以将其转换为VARCHAR2s并以这种方式进行分组。我个人不喜欢Oracle风格的JOINs,但是它们是有效的。

实际上,请稍等。您在此查询中没有聚合,因此不需要任何类型的GROUP BY子句。您是否要删除重复项? DISTINCT是做到这一点的方法。

select distinct
       dbms_lob.substr( gene_info, 4000 ) as gene_info, 
       pi.id, race, id_card_no, sdg.create_datetime
  from person_info pi, 
       sample_info si on si.self_object_id = pi.id, 
       sample_dna_gene sdg on sdg.sample_id = si.self_object_id
 where si.self_object_id in ( ... )