我正在从带有where子句的表中选择行,但否定where子句会返回比应有的行更多的行。
给定一个具有1000行的表,一个select where
返回600行,那个select where
的取反版本不应该返回400行吗?
select count(*) from trips
行程表有420444
行。
我选择了所有从周末开始的旅行
select count(*) from trips
where service_id in
(select service_id from calendar_dates
where date_part('dow', date) in (5, 6))
返回363272
运行相同的查询,但行程不是在周末开始
select count(*) from trips
where service_id in
(select service_id from calendar_dates
where date_part('dow', date) not in (5, 6))
返回377326
363272
+ 377326
= 740598
,远比420444
当所涉及的where子句中有子查询时,count
函数的行为是否有所不同?
这是在具有GTFS数据https://developers.google.com/transit/gtfs/的数据库上完成的。我不知道自己错过了什么。
答案 0 :(得分:4)
它不是否定的。
如果您的服务ID与dow = 3, 4, 5, 6
相同,那么它将显示在2个计数中。
正确的否定是
select count(*) from trips
where service_id NOT in
(select service_id from calendar_dates
where date_part('dow', date) in (5, 6))
或与not exists