如何在单个结果集中加入或联合2个sql查询的结果

时间:2009-08-20 06:57:28

标签: java sql mysql

我有2个表(两个单独的SQL查询的结果,这个结果将包含在List <Object>中,其中每个对象代表数据库的一行)

TABLE_1

  • Dimension_1
  • Dimension_2
  • Fact_1

TABLE_2

  • Dimension_1
  • Dimension_2
  • Fact_2

我想在RESULTSET AS中加入这两个结果

Table_Resultant

  • Dimension_1
  • Dimension_2
  • Fact_1
  • Fact_2

由于查询系统中的部分内容有些复杂,我无法对结果表发出单一查询,由于这些限制,我将不得不加入两个结果列表<object>(table_1&amp; table_2 )每次进入table_resultant

问题的可能方法是什么?

在MYSQL中创建一个临时表(加入两个结果集)可能是一个潜在的解决方案??? 是的,我被允许在Mysql中创建临时表

是,“COMPLEX”SQL允许在2个“结果”中获取 resul_table

2 个答案:

答案 0 :(得分:2)

所以你可以做联盟而不加入?您能澄清一下是否需要在两个源表中匹配Dimension1和Dimension2的值?或者,如果您只需要从两个表中获取所有值并将它们合并到结果中(在这种情况下,是联盟可能会这样做)

你需要一个完整的外连接,假设在你的查询系统中是不可能的,这里是解决方案的概要,假设:

1. Fact1 and 2 are >=0 ints and 
2. no row in tablex where factx is null.

Select dimension1,dimension2,max(Fact1),max(Fact2) 
From (Select dimension1, dimension2, Fact1, -1 as Fact2 
      UNION 
      Select dimension1, dimension2, -1 , Fact2 ) 
GROUP by dimension1, dimension2 

这不是最终解决方案,当连接不匹配时,它不会为fact1或2返回NULL。当然,你必须使用CASE,或者如果你的查询系统认为max(NULL,1)= 1

联盟的完整解决方案:

Select dimension1, dimension2,  
       CASE WHEN max(Fact1) = -1 THEN NULL ELSE Fact1 END,  
       CASE WHEN max(Fact2) = -1 THEN NULL ELSE Fact2 END,  
From (Select dimension1, dimension2, Fact1, -1 as Fact2  
      UNION 
      Select dimension1, dimension2, -1 , Fact2 )  
GROUP by dimension1, dimension2  

如果您可以对两个结果集执行FULL OUTER JOIN,那么它将如下所示

Select isnull(t1.dimension1, t2.dimension1),   
       isnull(t1.dimension2,t2.dimension2),  
       t1.fact1,  
       t2.fact2  
FROM table1 t1 
OUTER JOIN table2 t2   
ON t1.dimension1=t2.dimension1 and t1.dimension2=t2.dimension2   

答案 1 :(得分:0)

很难回答,因为你没有真正详细解释你能做什么和不能做什么。乍一看,你试图产生一些简单的JOIN结果的数据 - 但是你说你不能这样做?如果你不被允许做这样一个基本的SQL事情,很难想象你能做什么。我们需要知道限制的性质。

您可以使用存储过程吗?