【发布时间】:2020-05-27 14:12:53
【问题描述】:
我有两张桌子。
所以 table1 看起来像:
+--------+-------------+--------
|id1 | id2 | date | degree |
+--------+-------------+--------
| 1 | 10 | 20200101 | 1 |
| 1 | 11 | 20200101 | 1 |
| 1 | 11 | 20200101 | 1 |
| 2 | 52 | 20200101 | 2 . |
| 2 | 52 | 20200101 | 2 . |
| 2 | 53 | 20200101 | . 2 . |
| 3 | 21 | 20200101 | 2 . |
| ...| ... | ... | ... |
+--------+-----------+----------
table2 是:
+--------+------------+-------+-------
|id1 | id2 | date | price | rank |
+--------+-------------+-------+-------
| 1 | 10 | 20200101 | 1200 | 1 |
| 1 | 10 | 20200101 | 1200 | 2 |
| 1 | 10 | 20200101 | | |
| 1 | 10 | 20200101 | 1300 | 1 |
| 1 | 10 | 20200101 | 1300 | 2 |
| ...| ... | ... | ... |... |
+--------+-----------+-----------------
我想要从 table2 获取价格列并将其添加到基于三列 id1、id2 和日期的 table1。如果我像这样进行简单的加入
select tab1.id1, tab1.id2, tab1.date, tab2.price
from tab1
left join tab2
on tab1.id1 = tab2.id1
and tab1.id2 = tab2.id2
and tab1.date = tab2.date
这就是我们所拥有的:
+--------+------------+----------------
|id1 | id2 | date | price | degree |
+--------+-------------+----------------
| 1 | 10 | 20200101 | 1200 | 1 |
| 1 | 10 | 20200101 | 1200 | 1 |
| 1 | 10 | 20200101 | | 1 |
| 1 | 10 | 20200101 | 1300 | 1 |
| 1 | 10 | 20200101 | 1300 | 1 |
+--------+-----------+-------------------
但其实我想要的是这个:
+--------+------------+----------------
|id1 | id2 | date | price | degree |
+--------+-------------+----------------
| 1 | 10 | 20200101 | 1200 | . 1 . |
| 1 | 10 | 20200101 | 1300 | 1 . |
+--------+-----------+-------------------
【问题讨论】:
-
选择 Distinct 应该为您完成,以防您不想将它们组合在一起。
标签: sql postgresql presto