выбрать несколько столбцов, сгруппировать по одному столбцу, включает в себя clob - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу выбрать несколько столбцов из 3 таблиц и сгруппировать по self_object_id. Один из столбцов (gene_info) имеет тип CLOB.

Я пытался использовать max () для каждого столбца, кроме self_object_id, но не смог, потому что эта функция не подходит для типа данных 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 голосов
/ 05 ноября 2018

Во-первых, вы не можете GROUP BY a 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 ( ... )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...