Объединить SQL-запрос с JOINS и SQL-запрос с LISTAGG?

У меня есть два отдельных запроса Oracle SQL, которые будут работать независимо, но я не могу понять, как их объединить в один.

Запрос первый: СОЕДИНЕНИЕ полей из 4 таблиц.

SELECT 
       table01.guid,
       table02.kbcid, 
       table01.name,
       table01.filename, 
       table01.filesize,
       table01.essencegroup,
       table01.checksum,
       table01.type, 
       table02.kbcid, 
       table03.kbcnm,
       table03.parentkbcid, 
       table03.kbcpath,
       table04.metaid,
       table04.metavalue,
FROM table02
INNER JOIN table01 ON table02.guid=table01.guid
INNER JOIN table03 ON table02.kbcid=table03.kbcid
INNER JOIN table04 ON table01.guid=table04.guid;

Второй запрос: таблица с отношением один ко многим, использующая LISTAGG для объединения строк.

SELECT 
       table5.guid,
LISTAGG(TO_CHAR(table5.term), ',') WITHIN GROUP (ORDER BY table5.guid) AS 
        keywords
FROM table5
Group BY table5.guid;

В идеале я хотел бы объединить эти два запроса, чтобы вернуть один набор результатов. Но я продолжаю получать различные ошибки.

Может ли кто-нибудь предложить правильный способ форматирования этого запроса?


person stevec    schedule 13.09.2017    source источник
comment
попробуйте использовать свой второй запрос как подзапрос или CTE и присоединиться к нему с помощью guid   -  person Ferdinand Gaspar    schedule 14.09.2017
comment
Какова связь между таблицей 5 и другими таблицами?   -  person BA.    schedule 14.09.2017
comment
Table5 использует GUID первичного ключа совместно с другими таблицами.   -  person stevec    schedule 14.09.2017


Ответы (1)


Я не знаю отношения между таблицами, но я думаю, что вы можете использовать предложение WITH! Вот пример, исправьте это с помощью таблиц:

WITH tab5 AS (
SELECT 
   table5.guid,
   LISTAGG(TO_CHAR(table5.term), ',') WITHIN GROUP (ORDER BY table5.guid) AS 
    keywords
FROM table5
GROUP BY table5.guid
)
SELECT 
   table01.guid,
   table02.kbcid, 
   table01.name,
   table01.filename, 
   table01.filesize,
   table01.essencegroup,
   table01.checksum,
   table01.type, 
   table02.kbcid, 
   table03.kbcnm,
   table03.parentkbcid, 
   table03.kbcpath,
   table04.metaid,
   table04.metavalue,
 FROM table02
 INNER JOIN table01 ON table02.guid=table01.guid
 INNER JOIN table03 ON table02.kbcid=table03.kbcid
 INNER JOIN table04 ON table01.guid=table04.guid
 --Put relation to other tables
 INNER JOIN tab5 ON tabl01.guid = tab5.guid;
person Francesco Serra    schedule 14.09.2017