合并两个 SQL 查询的结果

时间:2021-04-07 06:44:28

标签: c# sql asp.net sql-server

我有两个表中的数据,我需要在一个查询中获取所有数据并加入获取数据。

SELECT 
kpip.PersonalName, 
kpiT.Name, 
kpiPR.KpiTarget, 
kpiPR.KpiResultDate, 
kpiPR.KpiResult
        FROM KpiPersonalResult AS kpiPR join KpiPersonal as kpip 
        on kpiPR.KpiPersonal = kpip.Id join KpiType AS kpiT 
        on kpip.KpiType = kpiT.Id join MerchantAdministrators as merA 
        on kpiPR.KpiAdded = merA.Id and kpiPR.KpiResultDate between '2021-04-07' and '2021-04-08' 
        
        select 
                kpiP.PersonalName, 
                kpiT.Name, 
                kpiP.KpiTarget 
                        from KpiPersonal as kpiP join KpiType as kpiT 
                        on kpiP.KpiType = kpiT.Id

1 个答案:

答案 0 :(得分:2)

基于第二个查询有 3 个与第一个查询同名的列的速度,我猜你的意思是将它们联合起来:

SELECT 
  kpip.PersonalName, 
  kpiT.Name, 
  kpiPR.KpiTarget, 
  kpiPR.KpiResultDate, 
  kpiPR.KpiResult
FROM 
  KpiPersonalResult AS kpiPR 
  join KpiPersonal as kpip on kpiPR.KpiPersonal = kpip.Id 
  join KpiType AS kpiT on kpip.KpiType = kpiT.Id 
  join MerchantAdministrators as merA on kpiPR.KpiAdded = merA.Id and kpiPR.KpiResultDate between '2021-04-07' and '2021-04-08' 

UNION ALL

select 
  kpiP.PersonalName, 
  kpiT.Name, 
  kpiP.KpiTarget,
  null, --put suitable default values for the other columns here
  null 
from
  KpiPersonal as kpiP 
  join KpiType as kpiT on kpiP.KpiType = kpiT.Id

联合查询需要相同数量的列。我在第二个查询(相对于第一个)中插入了 NULL 作为两个缺失列的默认值

UNION 使结果集变得更高。如果你打算让它变得更宽,那可以通过 JOIN 来完成。这样做的一个简单模式是:

WITH query1 AS(
  --query 1 here
), query2 AS (
  --query2 here
)
SELECT * FROM query1 JOIN query2 ON ...

关于格式化和缩进的旁注——当所有相关的操作都处于相同的缩进级别时,大多数人发现 SQL 最易读,例如在一个典型的查询中,SELECT FROM WHERE GROUP ORDER 关键字都处于相同的缩进级别,了涉及它们(选定列的列表中,或连接表的清单,到哪谓词等列表)块再次缩进的水平。我们通常也不使用 as 为表设置别名,但我们会在为 SELECT 中的列设置别名时使用它