【发布时间】:2017-12-13 09:39:35
【问题描述】:
我正在尝试选择表 A 中满足表 B 某些条件的所有条目。
在表 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 年内在同一地点采样的不同采样日期的所有组合。分类单元条目被多次列出。我有一张这样的桌子:
网站 |网站 |日期 |日期 |分类单元
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...
【问题讨论】:
-
你能给我们看一个实际输出的样本和你想要的输出吗?
-
添加示例表数据和预期结果,作为格式化文本(不是图像)。
-
我刚刚编辑了我的问题以包含这个。
标签: sql postgresql inner-join