目录

前言

准备数据库和表

表1

表2

最终员工表

SQL语句

扩展:with语句


前言

在工作中可能会遇到需要结合两张表的数据来添加到第三张表,或者说是第三张表数据有误,需要覆盖更新,本章通过举例来演示


准备数据库和表

表1

 create table Tap1( id varchar,family_name char,given_name varchar(10));

表2

 create table Tap2( id varchar,level varchar(10),job varchar(30));   

最终员工表

 create table worksheet  ( id varchar,name varchar(10),level varchar(10),job varchar(30));

建好表之后往表里插入一些数据

表1

表2

 表3

可以看到表1有id,姓,名;表2有id,等级,职位;表3现在只有姓名是正确的,三个表之间都有关联,但没有共有的关联,这时我们就需要使用with语句创建一个临时查询表,把表1表2通过id内连接,再把表1的姓名拼接起来,然后以拼接好的姓名=表3姓名为条件,来进行表三的更新

SQL语句

WITH x as (
SELECT t1.id,t1.family_name||t1.given_name name,t2.level,t2.job
FROM Tap1 as t1
JOIN Tap2 as t2
on (t1.id=t2.id)
)UPDATE worksheet SET id=x.id,level=x.level,job=x.job
FROM  x WHERE worksheet.name=x.name

这时再来查询一下worksheet表,信息已经更新无误了。

扩展:with语句

在 PostgreSQL 中,WITH 子句提供了一种编写辅助语句的方法,以便在更大的查询中使用。

WITH 子句有助于将复杂的大型查询分解为更简单的表单,便于阅读。这些语句通常称为通用表表达式(Common Table Express, CTE),也可以当做一个为查询而存在的临时表。

WITH 子句是在多次执行子查询时特别有用,允许我们在查询中通过它的名称(可能是多次)引用它。

WITH 子句在使用前必须先定义。

WITH 查询的基础语法如下:

WITHname_for_summary_data AS (SELECT Statement)SELECT columnsFROM name_for_summary_dataWHERE conditions <=> (SELECT columnFROM name_for_summary_data)[ORDER BY columns]

name_for_summary_data 是 WITH 子句的名称,name_for_summary_data 可以与现有的表名相同,并且具有优先级。

可以在 WITH 中使用数据 INSERT, UPDATE 或 DELETE 语句,允许你在同一个查询中执行多个不同的操作。

postgresql中连接两张表更新第三张表(updata)相关推荐

  1. Linq to Entity中连接两个数据库时要注意的问题

    Linq to Entity中连接两个数据库时要注意的问题 今天大学同学问了我一个问题,Linq to Entity中连接两个数据库时,报错"指定的 LINQ 表达式包含对与不同上下文关联的 ...

  2. mysql update 多表更新_MySQL UPDATE多表关联更新

    MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...

  3. excle中根据两列内容匹配第三列数据

    excle中根据两列内容匹配第三列数据 根据AB两列 找EF两列的对应的C列的值 I3输入公式: =INDEX($C$3:$C$482,MATCH(E3&F3,$A$3:$A$482& ...

  4. mysql 根据一张表更新另一张表_mysql从一张表更新另一张表,如何效率最高?

    最近工作上遇到的问题,有条sql语句执行时间一直很长,情况如下: a表记录电话通话情况的表,b表记录的是电话通话失败的原因,两表之间通过一个叫sessionid的字段关联在一起.两表结构大致如下: # ...

  5. 按主键更新另一个表oracle,SQL根据ID匹配从一个表更新到另一个表

    我相信一个连接的UPDATE FROM将有助于: MS SQL UPDATE Sales_Import SET Sales_Import.AccountNumber = RAN.AccountNumb ...

  6. mysql连接多个存储存储_Mysql(三):多表查询和存储程序

    今天内容: ● 多表查询(内连接 外连接 子查询) ● 存储程序(存储过程 函数) 多表查询 ​同时从多张数据表中查取到需要的数据即是多表查询. 多表查询时,参与查询的表中每条数据进行组合,这种效果称 ...

  7. mysql sql 多表更新语句_MySQL跨表、多表更新SQL语句总结

    Mysql跨表.多表更新SQL语句总结 MySQL可以在一个SQL语句中更新多张表的记录,也可以通过多个表之间的关联关系更新某个表的数据. 假定目前有两张表goods和goods_price表,前者是 ...

  8. c语言扑克牌随机发三张牌,扑克牌发三张概率组合一副扑克牌52张(不含大、小王),发三张牌,一共多少种组合.另外:1)三张中含一对的组合有多少张?(...

    共回答了20个问题采纳率:95% 这个题目我喜欢 所有组合为:C(52,5) 1.A组为三张不关联明牌,组合:52*48*44,与B组二张暗牌组成一个对子.B的组合为:(12-3)*(52-12).概 ...

  9. php中连接两个值,php - 如何从两个表的连接中选择一个值? - SO中文参考 - www.soinside.com...

    我想在LaravelMySQL中实现一些功能, 但似乎没有找到正确的解决方案. 我可以用子查询来实现我想要的东西, 但是我被告知他们没有联接那么高效. 而且,我将不得不把这个解决方案转换到Eloque ...

最新文章

  1. Win10 安装msi 提示2502、2503的错误代码 -- 命令提示符(管理员) -- msiexec /package...
  2. Xamarin Android开发实战(上册)
  3. 当 Vue 处理数组与处理纯对象的方式一样
  4. 解密TDE加密数据库
  5. 通过LDB_PROCESS函数使用逻辑数据库
  6. [Nginx]nginx 配置实例-负载均衡
  7. leetcode1448. 统计二叉树中好节点的数目(dfs)
  8. 【编撰】Directfb 深入 001 初始化简介 01
  9. DispatcherServlet服务调度
  10. 尚硅谷springSecurity笔记
  11. 最简单的的树莓派安装opencv教程(一键安装)
  12. uploadify ajax,Uploadify预防未来的Ajax请求
  13. excel表格中忘了撤销工作表保护密码怎么办
  14. Python调用 dll 文件
  15. Struts2(Maven),小白版
  16. Ehcache缓存的使用
  17. 室内地图导航功能接入流程
  18. 最贴近京东首页体验的嵌套滑动吸顶效果
  19. PTA 排序(快速排序,基数排序)
  20. leetcode/字符串交织,s1和s2字符串交织组成s3

热门文章

  1. 威联通NAS与群晖NAS通过Cloud Sync与webDAV实现文件同步的详细图文操作
  2. 发现了clickhouse的小彩蛋
  3. CTF常用工具_实时更新
  4. IOS添加自定义字体
  5. 田野调查手记·浮山摩崖石刻(三)
  6. 北京企业科技研究开发机构认定,奖励100万
  7. AVG游戏背景图片素材下载-共8套
  8. 【爆肝更新】Python基础教程:第五章_Python函数
  9. 同花顺分时成交量颜色修改
  10. Android游戏开发之数独课时----2