如何组合两个通过union连接查询的SQL查询

时间:2015-03-02 17:56:29

标签: db2

任何人都可以帮我写一个加入这两个查询的查询。 我正在使用IBM DB2。

(SELECT 
  TABLE1.COLS,TBLE2.COLS,TABLE3.COLS 
 FROM 
  TABLE1,TABLE2,TABLE3,TABLE_PROB  
 WHERE 
  TABLE_PROB.COL=TABLE1.COL,OTHER_CLAUSE ) 
UNION      
(SELECT 
  TABLE1.COLS,TBLE2.COLS,TABLE3.COLS 
 FROM 
  TABLE1,TABLE2,TABLE3,TABLE_PROB1  
 WHERE TABLE_PROB1.COL=TABLE1.COL,OTHER_CLAUSE )

union之前和之后的两个查询是相同的,除了“TABLE_PROB”而不是“TABLE_PROB”,它更改为“TABLE_PROB1”。从这两个表中都没有选择列,它们仅用于在where子句中进行过滤。

任何人都可以告诉我如何将两者结合到一个查询中。

可以针对以下方案考虑此查询。  员工详细信息表很少,其中包含所有员工的详细信息。    “TABLE_PROB”包含合同雇员列表,“TABLE_PROB1”包含永久雇员列表。我需要根据几个标准获得合同而非合同员工的详细信息。

由于查询具有较大的Whereclause和select子句通过使用union触发两个查询,因此增加了查询的开销。所以我需要通过一个查询来合并它。 我在这里先向您的帮助表示感谢。

1 个答案:

答案 0 :(得分:3)

您无法避开UNION,因为您仍然必须同时访问TABLE_PROBTABLE_PROB1。根据您的DB2版本,平台和系统配置,这可能会更好一点:

 SELECT 
  TABLE1.COLS,TBLE2.COLS,TABLE3.COLS 
 FROM 
  TABLE1,TABLE2,TABLE3 
 WHERE 
  OTHER_CLAUSE 
  AND
  EXISTS (
    SELECT 1 
    FROM TABLE_PROB
    WHERE COL=TABLE1.COL
    UNION
    SELECT 1 
    FROM TABLE_PROB1
    WHERE COL=TABLE1.COL
  )

取决于TABLE_PROB.COL和TABLE_PROB1.COL UNION ALL的内容而不是UNION也可能证明是有益的。