比较SQL #temptable中的结果但​​是我收到了错误的结果,错误的方法?

时间:2014-05-15 09:31:56

标签: sql sql-server tsql

对不起我的noob SQL问题......

我的目标是比较2个查询的结果。我需要来自查询#1(13000条记录)的记录,这些记录不在查询#2的结果中(12700条记录)。

为此,我创建了第一个查询:

SELECT projectnr INTO #temptbl 
FROM prproject P JOIN absences A ON p.projectnr = a.freetextfield_01
WHERE projectnr  LIKE 'CONL%' 

结果在#temptbl

中给了我13009条记录

我的第二个查询必须过滤现有记录:

DELETE FROM #temptbl
WHERE projectnr in (
   SELECT freetextfield_01 
   FROM absences 
   WHERE TYPE = 7013 
   GROUP BY freetextfield_01)

查询结果:

(SELECT freetextfield_01 
 FROM absences 
 WHERE TYPE = 7013 
 GROUP BY freetextfield_01)

返回12715条记录。

但在完整查询中,它会删除所有13009条记录而不是12715条记录。

也许使用一些"而不是"不需要创建一个temptable。声明,但我不知道该怎么做。

感谢阅读本文的麻烦:)

1 个答案:

答案 0 :(得分:1)

首先关闭......那些GROUP BY是不必要的......改为使用SELECT DISTINCT。

理论上你不需要临时表。您可以使用此查询完成所有这些操作:

SELECT p.projectnr
FROM prproject p
JOIN absences  a ON p.projectnr = a.freetextfield_01
WHERE p.projectnr  LIKE 'CONL%' AND p.projectnr NOT IN (
  SELECT freetextfield_01 
  FROM absences 
  WHERE type = 7013 
)

为什么第二个查询会删除所有内容?我想你在第一个查询中有重复的projectnr,并且7013类型的缺席覆盖了你喜欢CONL%的所有项目。没有看到数据,这是一个艰难的要求。

另外......根据2个表的关联方式,您可以简化查询。每个项目行有多少个缺勤行?这是一对多关系吗?你有没有缺席的项目吗?您想在结果集中保留这些与否吗?