【问题标题】:Combine an SQL Query with JOINS and a SQL Query with a LISTAGG?将 SQL 查询与 JOINS 和 SQL 查询与 LISTAGG 相结合?
【发布时间】:2018-02-22 18:10:45
【问题描述】:

我有两个独立的 Oracle SQL 查询,它们将独立工作, 但我不知道如何将它们组合在一起。

查询一:来自 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;

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

有人可以建议格式化此查询的正确方法吗?

【问题讨论】:

  • 尝试使用您的第二个查询作为子查询或 CTE 并使用 guid 加入它
  • table5和其他表有什么关系?
  • Table5 与其他表共享主键 GUID

标签: sql oracle join inner-join listagg


【解决方案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;

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 2016-04-17
    • 2011-11-17
    • 2020-06-08
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多