【问题标题】:SQL join on many queries许多查询的 SQL 连接
【发布时间】:2009-10-13 11:32:36
【问题描述】:

我有一张表,其结构如 table(PK, a, b, c, d, e, f, g)。

我有很多想加入的查询:

select PK, sum(c) where...

JOIN

select PK, sum(e) where...

JOIN

select PK, sum(g) where ...

JOIN

 select PK,a,b,d,f

每个 sum(c|e|g) 实际上都是一个

select sum(c|e|g) from .... where...

因为涉及的条件很多(不是所有的c|e|g都必须加)

这是最好的方法吗?有人建议我用 PL / SQL 编写它,我必须学习。如果它是要走的路,我会这样做,但我不确定上面显示的解决方案有什么问题。

编辑

我很确定它是一个加入。这就是我想要的。

我需要得到一个结果集的形式:

PK, a,b,COMPLEX_SUM_ON_C,d,COMPLEX_SUM_ON_D,f,COMPLEX_DUM_ON_G

所以我想加入许多查询来得到这个结果。

每个 COMPLEX... 都是另一个选择(选择总和...)。这是一张很大的桌子,写着

select a,b,(select sum..),d,(select sum...),f,(select sum...)

会产生不好的性能(所以我被告知要删除它)

我已经编辑了上面的查询。

提前致谢。

【问题讨论】:

  • 你确定你的意思不是联合吗?
  • 请显示输入表中的示例行和所需的输出。正如其他人所指出的,不清楚您是想要 JOIN 还是 UNION。此外,您的表格可能存在重大设计问题(取决于数据的实际外观)。
  • 如果不知道您希望从该查询中得到什么样的结果,就很难回答这个问题。我建议你在这里快速浏览一下:en.wikipedia.org/wiki/Join_%28SQL%29 看看它是否真的是你想要的 JOIN。
  • 我已经编辑了我的问题。

标签: sql plsql join


【解决方案1】:

我认为您的意思是“UNION”而不是“JOIN”。是否是最好的方法取决于您要达到的目标。

【讨论】:

    【解决方案2】:

    这不是一个明确定义的问题(目前)。

    假设 PK 是您的主键(即唯一的,根据定义),那么

    SELECT PK, SUM(c)
    FROM tbl
    GROUP BY PK
    

    总是

    相同
    SELECT PK, c
    FROM tbl
    

    所以分组(和聚合)相对没有意义。

    在您的预期结果中:

    PK, a,b,COMPLEX_SUM_ON_C,d,COMPLEX_SUM_ON_D,f,COMPLEX_DUM_ON_G
    

    COMPLEX_SUM_ON_CCOMPLEX_SUM_ON_DCOMPLEX_DUM_ON_G与PK有什么关系?

    我们知道 a、b、d、f 与 PK 的关系,因为对于每个 PK,我们可以在同一行中识别出唯一的 a、b、d、f。

    【讨论】:

      【解决方案3】:

      JOIN 的一个例子如下:

      Select a.col1, b.col2
      FROM table1 a, table2 b
      WHERE a.key = b.key;
      

      也可以写成:

      SELECT a.col1, b.col2
      FROM table1 a
      INNER JOIN table2 b
      ON a.key = b.key;
      

      编辑:

      阅读您对原始问题的重新编辑后,您可能可以使用 JOIN。当您在多个表中具有相关数据时,可以使用 JOIN,或者您可以多次指定同一个表。我在 Oracle 中使用过这两种类型。这是后一种类型的示例,希望对您有所帮助:

      SELECT t1.a, t1.b, t3.sum(c), t2.d, t4.sum(e), t1.f, t5.sum(g)
      FROM table1 t1, table1 t2, table1 t3, table1 t4, table1 t5
      WHERE  t1.a = 'hello'
      AND t2.a = 'world'
      AND t3.c = 10
      AND t4.e = 20
      AND t5.g = 100
      GROUP BY t1.a, t1.b, t2.d, t1.f;
      

      【讨论】:

      • 谢谢,但似乎我还不够清楚(我的错)。我重新编辑了我的问题。
      猜你喜欢
      • 2012-04-27
      • 2023-04-08
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      相关资源
      最近更新 更多