Объединение сложных запросов, выбор из 4 таблиц - PullRequest
0 голосов
/ 25 июня 2019

Я пытался объединить эти запросы безуспешно

Простой выбор fol.r_folder_path из dm_folder fol не работает, и я не уверен, почему ...

SELECT distinct(rec.r_object_id) as record_obj_id, rec.accession_no, rec.pier_content_type, rec.archive_status, rel.relation_name, t.object_name as template_name, t.exempt_from_review, fol.r_folder_path
FROM dm_relation rel, pier_record rec, pier_template t, dm_folder fol
WHERE rel.parent_id = rec.r_object_id
AND rel.child_id = t.r_object_id
AND rec.accession_no in ('6929860','6929838','6929866','6929825','6929830','6929746','6929688','6929839','6929872','6929816','6929770','6929731','6929715','6929821','6929726','6929815','6929656','6929631','6929621','6929737','6929824','6929627','6929639','6929607','6929571','6929736','6929743','6929722','6929677')

SELECT temp.r_object_id, temp.object_name, temp.title, temp.owner_name, temp.acl_name, fol.r_folder_path 
FROM pier_template temp, dm_folder fol 
WHERE temp.i_folder_id = fol.r_object_id 
AND r_folder_path is not nullstring enable(ROW_BASED)

Я надеюсь вернуть путь к папке, но получаю ошибку «ORA-00942: таблица или представление не существует»

Edit: кажется, что предложение JOIN не существует в DQL, я думаю, что некоторые вещи не пересекаются ... Я думаю, тогда мне нужно найти общий идентификатор в этой таблице dm_relation, которую я могу использовать, возможно.

Edit2: я думаю, что это работает!

 SELECT DISTINCT
 (rec.r_object_id) as record_obj_id,
  rec.accession_no,
  rec.pier_content_type,
  rec.archive_status,
  rel.relation_name,
  t.object_name as template_name,
  t.exempt_from_review,
  fol.r_folder_path
FROM
  dm_relation rel, pier_record rec, pier_template t, dm_folder fol
WHERE
  rel.parent_id = rec.r_object_id AND
  rel.child_id = t.r_object_id AND
  t.i_folder_id = fol.r_object_id AND
  fol.r_folder_path is not null AND
  rec.accession_no in ('6929860','6929838','6929866','6929825','6929830','6929746','6929688','6929839','6929872','6929816','6929770','6929731','6929715','6929821','6929726','6929815','6929656','6929631','6929621','6929737','6929824','6929627','6929639','6929607','6929571','6929736','6929743','6929722','6929677') enable(ROW_BASED)

1 Ответ

2 голосов
/ 25 июня 2019

Если я вас правильно понимаю, вы получаете слишком много результатов по первому запросу, а второй - попытка отфильтровать результаты более полно. Это имеет смысл, потому что, как уже сказал APC, у вас нет условия JOIN для DM_FOLDER.

Кажется, легко добавить условия из второго запроса в первый:

create table dm_relation(relation_name,parent_id,child_id) as
select 'relation_name', 1,2 from dual;
create table pier_record(r_object_id,pier_content_type,archive_status,accession_no) as
select  1,'pier_content_type','archive_status',6929860 from dual;
create table pier_template(title, owner_name, acl_name,object_name,exempt_from_review,r_object_id,i_folder_id) as
select  'title','owner_name','acl_name','object_name','exempt_from_review',2,3 from dual;
create table dm_folder(r_folder_path,r_object_id) as
select 'r_folder_path',3 from dual
union all
select null,4 from dual
union all
select 'r_folder_path2', 5 from dual;

SELECT rec.r_object_id as record_obj_id, 
rec.accession_no, rec.pier_content_type, rec.archive_status, rel.relation_name, 
t.object_name as template_name, t.exempt_from_review, fol.r_folder_path
FROM dm_relation rel, pier_record rec, pier_template t, dm_folder fol
WHERE rel.parent_id = rec.r_object_id
AND rel.child_id = t.r_object_id
AND rec.accession_no in ('6929860','6929838','6929866','6929825','6929830','6929746','6929688','6929839','6929872','6929816','6929770','6929731','6929715','6929821','6929726','6929815','6929656','6929631','6929621','6929737','6929824','6929627','6929639','6929607','6929571','6929736','6929743','6929722','6929677')
and t.i_folder_id = fol.r_object_id 
AND fol.r_folder_path is not null;

RECORD_OBJ_ID ACCESSION_NO PIER_CONTENT_TYPE ARCHIVE_STATUS RELATION_NAME TEMPLATE_NA EXEMPT_FROM_REVIEW R_FOLDER_PATH 
------------- ------------ ----------------- -------------- ------------- ----------- ------------------ --------------
            1      6929860 pier_content_type archive_status relation_name object_name exempt_from_review r_folder_path 
...