如何组合两个 SQL 查询,其中查询由联合连接
How to combine two SQL queries where queries are joined by union
任何人都可以帮助我编写一个连接这两个查询的查询。
我正在使用 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_PROB1"。没有要从 table 中编辑的列 select,它们仅用于在 where
子句中进行过滤。
谁能告诉我如何将两者组合成一个查询。
以下场景可以考虑此查询。
很少有员工详细信息 table,其中包含所有员工的详细信息。
"TABLE_PROB" 包含合同雇员列表,"TABLE_PROB1" 包含永久雇员列表。我需要根据几个标准获取合同的详细信息,而不是合同员工。
由于查询有很大的 Whereclause 和 select 子句通过使用 union 触发两个查询,增加了查询的成本。所以我需要通过一个查询来合并它。
我在这里先向您的帮助表示感谢。
您无法避免 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
也可能证明是有益的。
任何人都可以帮助我编写一个连接这两个查询的查询。 我正在使用 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_PROB1"。没有要从 table 中编辑的列 select,它们仅用于在 where
子句中进行过滤。
谁能告诉我如何将两者组合成一个查询。
以下场景可以考虑此查询。 很少有员工详细信息 table,其中包含所有员工的详细信息。 "TABLE_PROB" 包含合同雇员列表,"TABLE_PROB1" 包含永久雇员列表。我需要根据几个标准获取合同的详细信息,而不是合同员工。
由于查询有很大的 Whereclause 和 select 子句通过使用 union 触发两个查询,增加了查询的成本。所以我需要通过一个查询来合并它。 我在这里先向您的帮助表示感谢。
您无法避免 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
也可能证明是有益的。