我想从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
答案 0 :(得分:0)
首先,您不能GROUP BY
和CLOB
。你就是不行您将必须找到其他方式来做到这一点。如果您的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 ( ... )