gpt4 book ai didi

SQL:在没有 INNER JOIN 的情况下比较条目部分的两个表

转载 作者:行者123 更新时间:2023-11-29 13:46:23 25 4
gpt4 key购买 nike

我正在尝试选择满足表 B 某些条件的表 A 的所有条目。

在表 A 中,我有物种样本,列有 date、site、sample_id(地点和日期的组合)和 taxon

在表 B 中,我有环境数据样本,列为date, site, sample_id

我想获得表 A 的所有物种样本,其中环境样本(表 B)是在同一地点和 2005 年采集的。但是,日期列的格式为 yyyy-mm-dd 而不是 yyyy。

我尝试了以下代码:

SELECT tableA.site AS Asite, tableB.site AS Bsite, tableA.date AS Adate, tableB.date AS Bdate, tableA.taxon
FROM tableA
INNER JOIN tableB
ON Asite = Bsite
WHERE (Adate BETWEEN '2005-01-01' AND '2005-12-31')
AND (Bdate BETWEEN '2005-01-01' AND '2005-12-31')

这将生成一个表格,其中包含 2005 年内在同一地点采样的不同采样日期的所有组合。分类单元条目被多次列出。我有一张这样的 table :

网站 |网站 |更新 |日期 |分类单元

BY | BY | 2005-07-17 | 2005-03-22 | Navicula antonii
BY | BY | 2005-07-16 | 2005-03-22 | Navicula antonii
BY | BY | 2005-07-17 | 2005-04-19 | Navicula antonii
BY | BY | 2005-07-16 | 2005-04-19 | Navicula antonii

但是,我不希望在一个日期采样的物种被列出两次。该表应如下所示:

**Asite | Bsite | Adate | Bdate | taxon**
BY | BY | 2005-07-17 | 2005-03-22 | Navicula antonii
BY | BY | 2005-07-16 | 2005-03-22 | Navicula antonii

我希望我能以某种方式解释我的问题,如果有人知道解决方案,我将不胜感激。

也许我应该以不同的方式解决这个问题,并以某种方式在日期列的年份进行 INNER JOIN ...

最佳答案

我认为您只希望“A”中的每行一行。如果是这样,聚合或 distinct on 可能就是您想要的:

SELECT DISTINCT ON (a.site, a.date, a.taxon) a.site AS Asite, b.site AS Bsite, a.date AS Adate, b.date AS Bdate, a.taxon
FROM tableA a INNER JOIN
tableB b
ON a.Asite =b. Bsite
WHERE a.Adate BETWEEN '2005-01-01' AND '2005-12-31' AND
b.Bdate BETWEEN '2005-01-01' AND '2005-12-31'
ORDER BY a.site, a.date, a.taxon, b.date;

关于SQL:在没有 INNER JOIN 的情况下比较条目部分的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47789775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com