PostgreSQL SQL计算值

syqv5f0l  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(218)

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

  1. staging.customers
  2. - customerid: integer
  3. - first: varchar(255)
  4. - last: varchar(255)
  5. - age: integer
  6. prod.policies
  7. - customerid: integer
  8. - policynumber: varchar(255)
  9. - policytype: varchar(255)
  10. prod.result
  11. - customerid: integer
  12. - first: varchar(255)
  13. - last: varchar(255)
  14. - age: integer
  15. - policytype: varchar(255)

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

  1. 6 ,age = (cust.age + 5)


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

  1. SELECT * FROM prod.result;


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

tgabmvqs

tgabmvqs1#

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

  1. INSERT INTO prod.result(--inserting the result into a third table (prod.result)
  2. customerid
  3. ,first
  4. ,last
  5. ,age
  6. ,policytype
  7. )
  8. SELECT cust.customerid
  9. ,cust.first
  10. ,cust.last
  11. ,cust.age + 5 --"lets me transoform the values with simple functions/expressions"
  12. ,pol.policytype
  13. FROM staging.customers cust --"takes the result of a join of two tables (staging.customers and prod.policies)"
  14. JOIN prod.policies pol
  15. ON cust.customerid = pol.customerid;

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

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


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

展开查看全部

相关问题