我在SQL Server中有很多单独的查询,我希望通过主查询来组合。
我想做这样的事情:
SELECT * FROM Query1
UNION ALL
SELECT * FROM Query2
UNION ALL
SELECT * FROM Query3
这看起来很基本,但我找不到从另一个查询引用查询的语法。在创建子查询等方面似乎有无穷无尽的资源,但将所有查询组合成1个主查询将会非常混乱且无法使用。有没有办法以我尝试的方式执行此操作 - 或者我是否必须将所有内容重写为一个巨大的查询?
答案 0 :(得分:0)
这样做没有问题。您只需检查所有子列查询返回的列是否相同。这是一个例子。
select *
from (select * from sys.dm_os_loaded_modules where description like '%WINRT%') as Q1
UNION ALL
select *
from (select * from sys.dm_os_loaded_modules where description like '%RUNTIME%') as Q2
答案 1 :(得分:0)
你的问题有点不清楚,但我会专注于这一行:
但是我找不到从另一个查询引用查询的语法。
我所知道的最接近这种事情的是CTE:
WITH cte1 AS (
paste query 1 here
),
cte2 AS (
paste query 2 here
),
cte 3 AS (
paste query 3 here
)
SELECT * FROM cte1
UNION ALL
SELECT * FROM cte2
UNION ALL
SELECT * FROM cte3
另一种方法并非真正引用来自查询的查询",但可能是您想要的,可能是创建临时表或表变量,并插入每个行的行一次一个地查询它。那么你的主要查询"将从临时表/变量中选择所有行。
答案 2 :(得分:0)
以下是我如何理解的方法:
SELECT Query1.Stuff, Query1.MoreStuff, Query2.Stuff, Query3.Stuff
FROM (
Query1 SQL
) AS Query1
JOIN
(
Query2 SQL
) AS Query2
on Query1.key = Query2.key
JOIN
(
Query3 SQL
) AS Query3
on Query2.key = Query3.key