SQL中的EXISTS / NOT EXISTS

时间:2016-01-03 16:24:42

标签: sql oracle

  • 项目(idProject,nameProject)
  • 运营商(idOperator,nameOperator)
  • Project_Operator(idProject,idOperator,begindate,enddate)

我想要过去7个月他们从未参与过项目的运营商列表

SELECT I.* 
FROM Operator I
WHERE NOT EXISTS (SELECT * 
                  FROM Project_Operator 
                  WHERE SYSDATE-begindate < 7 
                    AND I.numOperator = numOperator);

我想知道这是否正确

1 个答案:

答案 0 :(得分:1)

你有点接近,但日期之间的差异是以天为单位,而不是几个月,逻辑是倒退的:

SELECT I.* 
FROM Operator i
WHERE NOT EXISTS (SELECT * 
                  FROM Project_Operator  po
                  WHERE po.begindate > add_months(sysdate, -7) AND
                        I.numOperator = po.numOperator
                );

也就是说,过去七个月(not exists1)开始没有项目(“po.begindate > add_months(sysdate, -7)”)。