Oracle SQL Select查询返回的ID不符合where子句

弗拉基米尔·吉切夫(Vladimir Gichev)

如果ID的数据范围超出一行,则我的查询工作正常。但是,如果该ID例如有2行-第一个超出日期范围,第二个超出数据范围,则查询将向我返回此ID。

SELECT DISTINCT na.public_id
  FROM na_agent_cients na
  JOIN tt_call cc
  ON na.public_id=cc.primary_contact_id
  WHERE cc.call_date NOT BETWEEN TO_DATE('10/09/2016', 'dd/mm/yyyy') AND TO_DATE('13/09/2016', 'dd/mm/yyyy')

因此,例如,如果我有一个id,并且此id有两行,第一行的日期为05/09/2016,第二行的日期为11/09/2016,查询将向我返回此ID,那是错误的。

穆雷尼克

此ID存在于一排日期范围,所以它应该被退回。如果要排除出现在范围之外的行中的所有ID,可以使用not exists运算符:

SELECT DISTINCT na.public_id
FROM   na_agent_cients na
WHERE  NOT EXISTS (SELECT * 
                   FROM   tt_call cc
                   WHERE  na.public_id = cc.primary_contact_id AND
                          cc.call_date NOT BETWEEN 
                                       TO_DATE('10/09/2016', 'dd/mm/yyyy') AND 
                                       TO_DATE('13/09/2016', 'dd/mm/yyyy'))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章