将两个查询合并为1(无需创建tmp表)

时间:2019-07-19 01:46:49

标签: sql

我通过创建两个查询来填充表。第一个将2列的不同组合拉出到临时表中。第二个在临时表上与另一个左连接。这是查询:

SELECT DISTINCT Name, ID  
INTO #tmpID
FROM Staging.Name

SELECT * 
FROM Perf.Hours w
LEFT JOIN #tmpID wr ON w.Name = wr.Name

我想创建一个查询,使我可以确认Perf.Hours表的计数正确。当我分别运行上述两个查询时,Staging.Name中的计数与Perf.Hours表中的计数匹配。我正在努力创建一个查询而不必创建tmp表。有任何想法吗?

这是我最近的尝试:

SELECT count(*) 
    from (
SELECT DISTINCT Name, ID  
FROM Staging.Name
LEFT JOIN Perf.Hours wr ON w.Name = wr.Name
) AS Staging

但是计数根本不匹配。

1 个答案:

答案 0 :(得分:1)

您可以将第一个组合为“表表达式”。例如:

SELECT count(*) 
FROM Perf.Hours w
LEFT JOIN (
  SELECT DISTINCT Name, ID  
  FROM Staging.Name
) wr ON w.Name = wr.Name

您还可以将它们组合在一起,将第一个作为CTE(公用表表达式),如下所示:

with
wr as (
  SELECT DISTINCT Name, ID  
  FROM Staging.Name
)
SELECT count(*)
FROM Perf.Hours w
LEFT JOIN wr ON w.Name = wr.Name