C# 组合两个SQL查询的结果
我有两个表中的数据,我需要在一个查询中获取所有数据并连接获取数据C# 组合两个SQL查询的结果,c#,sql,asp.net,sql-server,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
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
基于第二个查询与第一个查询具有相同名称的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作为默认值
结合使结果集变得更高。如果你想让它变得更广泛,那就通过加入来实现。这样做的一个简单模式是:
WITH query1 AS(
--query 1 here
), query2 AS (
--query2 here
)
SELECT * FROM query1 JOIN query2 ON ...
关于格式和缩进的旁注-大多数人认为,当所有相关的操作都处于相同的缩进级别时,SQL最具可读性。例如,在典型的查询中,SELECT FROM WHERE组顺序关键字都处于相同的缩进级别,与它们相关的块包括选定列的列表或联接表的列表,where'd谓词列表等再次缩进一级。我们通常也不使用as-when-aliasing表,但在SELECT中对列进行别名时使用它。您需要显示一些示例数据、预期结果,并解释您希望如何准确组合数据。您是否考虑过union all?Bro如何不允许从我的组合列表中复制数据?请单独使用union而不是union all,或者重新配置查询,使其不选择重复数据。您应该意识到,UNION通过相当密集的操作执行重复数据消除—如果您可以在源位置停止重复数据,而不是在之后尝试将其删除,则可能会提高性能