Mic*_*urd 9 sql db2 union subquery
我有一组表,逻辑上是出于性能原因将一个表拆分成多个表.我需要编写一个有效地将所有表连接在一起的查询,因此我使用结果的单个where子句.我已成功使用UNION对每个子表明确使用WHERE子句的结果,如下所示
SELECT * FROM FRED_1 WHERE CHARLIE = 42
UNION
SELECT * FROM FRED_2 WHERE CHARLIE = 42
UNION
SELECT * FROM FRED_3 WHERE CHARLIE = 42
Run Code Online (Sandbox Code Playgroud)
但由于有十个单独的子表更新WHERE子句每次都很痛苦.我想要的是这样的
SELECT *
FROM (
SELECT * FROM FRED_1
UNION
SELECT * FROM FRED_2
UNION
SELECT * FROM FRED_3)
WHERE CHARLIE = 42
Run Code Online (Sandbox Code Playgroud)
如果它有所不同,则查询需要针对DB2数据库运行.
这是我需要做的更全面(消毒)的版本.
select *
from ( select * from FRD_1 union select * from FRD_2 union select * from FRD_3 ) as FRD,
( select * from REQ_1 union select * from REQ_2 union select * from REQ_3 ) as REQ,
( select * from RES_1 union select * from RES_2 union select * from RES_3 ) as RES
where FRD.KEY1 = 123456
and FRD.KEY1 = REQ.KEY1
and FRD.KEY1 = RES.KEY1
and REQ.KEY2 = RES.KEY2
Run Code Online (Sandbox Code Playgroud)
新的消息:
看起来这个问题更多地与联合中的字段数量有关.如果我大大限制了字段,我可以获得以下大部分语法变体.不幸的是,限制这些字段意味着最终的查询,虽然可能有用,但并没有给我我想要的结果.除了2个键之外,我还设法从其中一个表中获得了另外3个字段.不止于此,查询失败.
Inf*_*kka 30
我相信你必须给你的子查询结果命名.我不知道db2所以我在黑暗中拍摄,但我知道这可以在其他几个平台上运行.
SELECT *
FROM (
SELECT * FROM FRED_1
UNION
SELECT * FROM FRED_2
UNION
SELECT * FROM FRED_3) AS T1
WHERE CHARLIE = 42
Run Code Online (Sandbox Code Playgroud)