提问人:Elliot 提问时间:10/4/2023 更新时间:10/4/2023 访问量:26
当我使用不同的列名作为条件时,sqlite not in 和 not exists 子句都不会返回任何数据
Both sqlite not in and not exists clause are not returning any data when I use different column names as criteria
问:
我正在使用适用于 Excel 的 XLWINGS 插件,以便直接在 Excel 中使用 SQL。(XLWINGS 是一个使用 SQLite 进行查询的 Python 插件。
我正在分析从 iNaturalist 下载的大约 20,000 条记录的表格。我的目标是展示哪些物种在一年中的某个月“出现”。
使用 SQL,我创建了表 B,其中显示了前几个月观察到的物种。然后,我进行第二次查询,以查找在我检查的月份中观察到的物种,但表B中不存在哪些物种。
例如,为了显示 5 月出现的物种,第一个查询选择 1 月、3 月和 4 月的所有观测值。第二个查询应显示 5 月份观察到但在表 B 中未发现的所有物种。
当我使用以下代码创建表 B 时,所有这些都有效
select distinct species from a where month <5 and species !=''
以及以下代码来获取最终结果:
select taxonomy,scientific_name, species, common_name, date, image_url, id from a where month = 5 and species not in (select species from b) order by taxonomy, species, Month_day
我需要将其更改为使用“scientific_name”而不是“物种”以获得更有意义的结果。“species”和“scientific_name”都是 Excel 中的文本数据类型,但第二个查询在更改后不会生成任何输出。
在下文中,我刚刚将两个 Select 语句的“物种”更改为“scientific_name”。第一个查询适用于表 B,但下面的第二个查询不会生成任何输出:
select taxonomy,scientific_name, species, common_name, date, image_url, id from a where month = 5 and scientific_name not in (select scientific_name from b) order by taxonomy, scientific_name, Month_day, species
我还尝试了以下方法,但也没有用:
select taxonomy, scientific_name, species, common_name, date, image_url,id from a where month = 5 and not exists (select 1 from b where scientific_name = b.scientific_name) order by taxonomy, scientific_name, Month_day
任何想法都非常欢迎。
答:
如果表 B 的行为 NULL,则由于 NULL 的三值逻辑,不在中的表达式将始终为 FALSE。
看这里scientific_name
(select scientific_name from b)
不存在的另一个版本是正确的,但您需要比较a.scientific_name = b.scientific_name
select taxonomy, scientific_name, species, common_name, date, image_url,id
from a where month = 5
and not exists (select 1 from b where a.scientific_name = b.scientific_name)
order by taxonomy, scientific_name, Month_day
评论