2017-09-13 76 views
0

我有两个独立的Oracle SQL查询将独立工作, 但我不知道如何将它们合并为一个。将SQL查询与JOIST和SQL查询结合使用LISTAGG?

查询一:来自4个表格的JOIN字段。

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; 

理想情况下,我想结合这两个查询返回一组结果。 但我不断收到各种错误。

有人可以建议正确的方式来格式化这个查询吗?

+1

尝试用你的第二个查询作为子查询或CTE和使用GUID –

+0

是什么表5和其他表之间的关系加入? –

+0

表5与其他表共享主键GUID – vgndc

回答

0

我不知道表之间的关系,但我认为你可以使用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;