2017-09-13 4 views
0

独立して動作する2つの別個のOracle SQL問合せがありますが、 は1つに結合する方法を理解できません。SQLクエリとJOINSクエリとSQLクエリをLISTAGGで結合しますか?

クエリ1: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; 

クエリ2:1対多リレーションシップのテーブルで、LISTAGGを使用して行を連結します。

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

理想的には、これらの2つのクエリを組み合わせて1つの結果セットを返すことができます。 しかし、私はいろいろなエラーを受けています。

誰かがこのクエリをフォーマットする正しい方法を提案できますか?

+1

は、サブクエリまたはCTEとして2番目のクエリを使用して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;