我有两个表中的数据,我需要在一个查询中获取所有数据并加入获取数据。
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
答案 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 中的列设置别名时使用它