2017-09-13 1 views
0

J'ai deux requêtes SQL Oracle distinctes qui fonctionneront indépendamment, mais je n'arrive pas à comprendre comment les combiner en une seule.Combiner une requête SQL avec JOINS et une requête SQL avec un LISTAGG?

Requête un: un JOIN de champs de 4 tables.

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; 

Interroger deux: une table avec un à plusieurs, en utilisant LISTAGG à concaténer lignes.

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

Idéalement, je voudrais combiner ces deux requêtes pour retourner un ensemble de résultats. Mais je continue à recevoir diverses erreurs. Est-ce que quelqu'un peut suggérer la bonne façon de formater cette requête?

+1

essayez d'utiliser votre deuxième requête en tant que sous-requête ou CTE et se joindre à l'aide guid –

+0

Quelle est la relation entre les tables table5 et l'autre? –

+0

Le tableau 5 partage le GUID de clé primaire avec d'autres tables – vgndc

Répondre

0

Je ne connais pas la relation entre les tables mais je pense que vous pouvez utiliser la clause WITH! Voici un exemple, fixer avec des tables relation:

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;