admin

postgresql:有条件且无重复的联接

sql

我有一个包含一系列唯一ID的表A。我有另一个表B,其中包含一些此ID,但不是每个ID,一个名为value的字段和另一个名为idcategory的字段。在此表B中,由于类别不同,id可能会出现几次。

我想以唯一的方式列出表A中的所有id,并以定义的类别(idcategorie =
1)列出表B中关联的特定值。表A中的ID无法显示在表B中,但是无论如何我都希望在最终结果中获得此信息,并且不能重复。

这是一个例证:

表A

id
-----
1
2
3
4
5
6
7
8

表B

id | idcategory  | value
------------------------
1  |   1         |  red
1  |   2         |  circle
2  |   1         |  green
3  |   1         |  blue
3  |   2         |  square
4  |   1         |  green
4  |   2         |  circle 
5  |   1         |  red
5  |   2         |  square
8  |   2         |  circle

结果

id | idcategory  | value
------------------------
1  |   1         |  red
2  |   1         |  green
3  |   1         |  blue
4  |   1         |  green
5  |   1         |  red
6  |   null      |  no value
7  |   null      |  no value
8  |   null      |  no value

在postgreSQL中实现此目标的最佳方法是什么?LEFT JOINUNION


阅读 189

收藏
2021-07-01

共1个答案

admin

您似乎想要一个left join

select a.id, b.idcategory, b.value
from a left join
     b
     on b.id = a.id and b.idcategory = 1;

value列具有NULL而不是'no value'。您 可以 替换它,但是NULL通常可以达到目的。

2021-07-01