对不起我的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。声明,但我不知道该怎么做。
感谢阅读本文的麻烦:)
答案 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个表的关联方式,您可以简化查询。每个项目行有多少个缺勤行?这是一对多关系吗?你有没有缺席的项目吗?您想在结果集中保留这些与否吗?