PostgreSQL SQL计算值

syqv5f0l  于 12个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(198)

SQL和PostGres新手警告。我试图将一个简单的查询放在一起,该查询接受两个表(staging.customers和prod.policies)的连接结果,然后在将结果插入第三个表(prod.result)之前,让我用简单的函数/表达式转换值。
我希望,如果我能得到这个简单的合成的例子工作,它将落入我的地方。
我有以下内容:
模式:

staging.customers
 - customerid: integer
 - first: varchar(255)
 - last: varchar(255)
 - age: integer

prod.policies
 - customerid: integer
 - policynumber: varchar(255)
 - policytype: varchar(255)

prod.result
 - customerid: integer
 - first: varchar(255)
 - last: varchar(255)
 - age: integer
 - policytype: varchar(255)

字符串
我想我可以使用从第1行开始到第7行结束的SET块来做这样的事情:

6    ,age        = (cust.age + 5)


我没有得到任何错误和值被插入,但年龄的值没有增加5,当我:

SELECT * FROM prod.result;


有人能告诉我哪里出错了吗?我想要的只是一种在将结果写入另一个表之前操作连接结果的方法。真的很感谢任何帮助!

tgabmvqs

tgabmvqs1#

我想你可能忽略了updateinsert的作用。如果你从一个全新的空prod.result表开始,然后运行你的更新,它绝对什么也不做,因为update什么也没有。然后插入只写staging.customersprod.policies中当前的内容。
这一点:
获取两个表(staging.customers和prod.policies)的连接结果,然后在将结果插入第三个表(prod.result)之前,让我用简单的函数/表达式转换这些值
所有这些都可以在一个insert中完成。在写入insert之前,您可以动态更改从源表中阅读的内容:

INSERT INTO prod.result(--inserting the result into a third table (prod.result)
      customerid
      ,first
      ,last
      ,age 
      ,policytype
  )
 SELECT   cust.customerid
      ,cust.first
      ,cust.last
      ,cust.age + 5  --"lets me transoform the values with simple functions/expressions"
      ,pol.policytype

 FROM staging.customers cust --"takes the result of a join of two tables (staging.customers and prod.policies)"
  JOIN prod.policies pol
  ON cust.customerid = pol.customerid;

字符串
如果你想用staging.customersprod.policies中的行预填充result,然后以某种方式更改它们,首先运行insert,然后运行update,如果你只向上或向下提升值,完全不需要from,而不需要引用任何其他行或表中的行:

UPDATE prod.result
  SET age        = age + 5 --this is applied to `age` in every row
      --all other columns remain unchanged
;


如果你的脚本在所有这些之前有一个result表的create语句,你实际上可以把创建、读取、转换和写入都合并到一个create table as select语句中。

相关问题