任何人都可以帮我写一个加入这两个查询的查询。 我正在使用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触发两个查询,因此增加了查询的开销。所以我需要通过一个查询来合并它。 我在这里先向您的帮助表示感谢。
答案 0 :(得分:3)
您无法避开UNION
,因为您仍然必须同时访问TABLE_PROB
和TABLE_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
也可能证明是有益的。