我有一个包含一系列唯一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 JOIN?UNION?
LEFT JOIN
UNION
您似乎想要一个left join:
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通常可以达到目的。
value
NULL
'no value'