sql - PostgreSQL 9.5 在多次出现的键上插入数据

标签 sql postgresql

我有 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/

相关文章:

postgresql - 获取一段线串的方位角(角度)的最简单方法是什么?

python - 无法将 django 迁移应用到 postgres 数据库

sql - 条件超前/滞后函数 PostgreSQL?

postgresql - 在 PostgreSQL 中查找日期序列

以天为单位的 SQL 日期差异结果错误

sql - 为什么这个看起来缺少空格的 SQL 查询可以工作?

sql - 如何在sql server中创建依赖于其他列的默认约束

c# - 如何显示数据库 ASP.Net 中的特定行记录?

java - 使用 jOOQ 将查询字符串转换为 Query 或 SelectQuery 对象

sql - 加入多个表/约束或 has_one_through 与次要约束