首页 > 解决方案 > postgresql:有条件加入,没有重复

问题描述

我有一个包含一系列唯一 ID 的表 A。我有另一个表 B,其中包含一些这个 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 JOIN? UNION?

标签: sqlpostgresql

解决方案


你似乎想要一个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通常用于此目的。


推荐阅读