SQL连接许多查询

时间:2009-10-13 11:32:36

标签: sql plsql join

我有一个表格,如表格(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

每个总和(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...)

会产生糟糕的表现(所以我被告知要将其删除)

我上面编辑了我的查询。

提前致谢。

3 个答案:

答案 0 :(得分:3)

我认为你的意思是“UNION”不是“加入”。是否最好的方式取决于你想要达到的目标。

答案 1 :(得分:2)

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;

答案 2 :(得分: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。