我有 2 个表,它们代表相同类型的数据,一个在我的数据库中,另一个来 self 的客户的。他和我的表都有一些 ID 作为 PRIMARY KEY,但它们绝对不相关。
有一个字段(field1)是两个表之间共有的,但这个字段并不总是唯一的。在大多数情况下,每个表中具有该字段的元组数量相同,但并非必须如此。这是说明情况的示例:
我的 table :
id_mytable field1 field2 id_clients
1 aa1 null null
2 aa1 null null
3 aa1 null null
4 aa2 null null
5 aa2 null null
6 aa3 null null
7 aa4 null null
和客户的表:
id_clients field1 field2
9 aa1 value1
10 aa1 value2
11 aa2 value3
12 aa2 value4
13 aa2 value5
14 aa3 value6
15 aa4 value7
我想要得到的结果,按 field1 排序:
id_mytable field1 field2 id_clients
1 aa1 value1 9
2 aa1 value2 10
3 aa1 null null
4 aa2 value3 11
5 aa2 value4 12
null aa2 value5 13
6 aa3 value6 14
7 aa4 value7 15
您会注意到结果表中的值未满足,这是我的表和客户的表之间的差异,并且插入了一个新行。我的想法是能够用 field2 和 id_clients 来完成我的表。到目前为止,我还想不出一种方法来实现这一目标,我的猜测是我的相对初学者水平让我错过了数据库的概念......
这是一个在线示例,其中包含 ttallierchio 提出的代码:http://rextester.com/LOLH81061
非常感谢您的关注。
最佳答案
您想使用完全外部联接。这样做的原因是您不确定数据是否存在于任何一个表中,因此您想要合并并获取数据(如果存在于任何一个表中)。我只会使用行号来确保唯一性。
SELECT row_number() over(order by mt.field1),
coalesce(mt.field1,c.field1) as field1,
coalesce(mt.field2,c.field2) as field2,
c.id as id_clients
FROM mytable mt
FULL OUTER JOIN clients c
on mt.id = c.id and c.field1 = mt.field1;
关于sql - PostgreSQL 9.5 在多次出现的键上插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45506425/