我正在使用 Excel 的 XLWINGS 插件,以便直接在 Excel 内部使用 SQL。 (XLWINGS 是一个 Python 插件,使用 SQLite 进行查询。)
我正在分析从 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”以获得更有意义的结果。 “species”和“scientific_name”都是 Excel 中的文本数据类型,但更改后第二个查询不会产生任何输出。
在下面我只是将两个 Select 语句的“species”更改为“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 存在
scientific_name
为 NULL 的行,则由于 NULL 的三值逻辑,不在 (select scientific_name from b)
中的表达式将始终为 FALSE。
请参阅此处
另一个不存在的版本是正确的,但你需要比较
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