簡體   English   中英

如何在單個結果集中聯接或合並2個SQL查詢的結果

[英]how to join or Union result of 2 sql queries in single result set

我有2個表(兩個單獨的SQL查詢的結果,並且此結果將包含在List <Object> ,其中每個對象代表數據庫的1行)

表格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&table_2)合並到table_resultant中

解決該問題的可能方法是什么?

在MYSQL中創建一個臨時表(以連接兩個結果集)可能是一個潛在的解決方案??? 是的,我可以在Mysql中創建臨時表

是的,在兩個“結果”上允許使用“ COMPLEX” SQL來獲取result_table

因此,您可以進行聯盟,但不能加入? 您能否澄清兩個源表中是否需要匹配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 

那不是最終的解決方案,當聯接不匹配時,它將為事實1或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   

難以回答,因為您還沒有真正詳細解釋可以做什么和不能做什么。 乍一看,您正在嘗試生成一些簡單的JOIN所產生的數據-但是您說不能這樣做? 如果不允許您執行這種基本的SQL事情,那么很難想象您可以做什么。 我們需要了解限制的性質。

您可以使用存儲過程嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM