分享一段数据库中表数据更新SQL

简介:

应用场景

我们在应用程序开发的时候,经常会遇到这样的一种情况:附属表更新了,主表的数据没有更新,这个关联表不只是外键的关联(通过附属表 ID 关联),主表中还会存在一些附属表的字段,这样一般做的目的是,在查询显示的时候减少关联(性能考虑)。凡事都有相对性,比如我们有时候会对附属表中的数据进行更新,如果没有对附属字段添加触发器,这时候就造成附属表中的数据和主表不一致,没办法,我们需要对这些“过时数据”进行手动“刷新”。

比如我们有 Product 和 Provider 表,一个商品对应一个提供商,表结构如下(只做演示):

Product 和 Provider 表之间的关系通过 ProviderID 字段进行关联,ProviderName 这个字段就是上面我们说,为了减少关联查询用的,那如果 Provider 表中的 Name 值更新了,如何更新 Product 表中的 ProviderName 值呢?

问题分析

这个数据更新的问题,其实现在看来非常简单,但是我当时在解决这个问题的时候,莫名其妙多了很多想法,对于程序员来说,两个数据集的对应数据更新,我们怎么处理呢?最简单的是遍历然后再另一个数据集中进行查找,然后对查找后的结果进行修改保存,这是一般做法,比如下面的这段伪代码:

   DataView product = new DataView();
   DataView provider = new DataView();
   foreach (DataRow item in provider)
   {
       product.RowFilter = string.Format("ProviderID={0}", item["ID"]);
       //todo...
   }

上面这段代码是我们一般不经过大脑写出来的,试着想一下,如果存在几十万甚至几百万的数据,这种方式程序肯定会运行到明年,不可否认,当时我想过这种方式实现的,而且还是想写个程序脚本来完成数据更新,这是多么的不靠谱啊。

如果不用程序去完成数据更新,我们就得写 SQL 脚本,数据库也不是很熟悉,只能说会简单的语法(select),连修改列的属性都忘了,幸亏在去年毕业的时候,整理了一个简单 T-SQL 系列《T-Sql学习系列完结》,现在看来,当时真是太明智了,虽然这些简单的语法网上一找一大堆,但还是觉得自己整理的看着舒服。

实现上面数据更新有很多方式,我当时还想过用游标操作,但是一想和程序中的 foreach 有什么区别的呢?还是觉得干点实事吧,最后有了下面的一段 SQL 脚本,针对上面 Product 和 Provider 表的数据更新:

   update [dbo].[Product]
   set [dbo].[Product].ProviderName=[dbo].[Provider].Name
   from [dbo].[Provider]
   where [dbo].[Product].ProviderID=[dbo].[Provider].ID and ....

就这么简单,当时却花了很长的时间,甚至还有个疑问:不是一个数据库的表进行数据更新,可以用 SQL 实现吗?有点可笑,其实一个数据库实例下,跨数据库访问表的话,直接在表名之前加数据库名称就行了。



本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3920134.html,如需转载请自行联系原作者

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
相关文章
|
SQL 机器学习/深度学习 人工智能
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
本文系统性地阐述了自然语言转SQL(NL2SQL) 技术如何让非技术背景的业务分析师实现数据自助查询,从而提升数据驱动决策的效率与准确性。
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
924 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
522 6
|
SQL 人工智能 Java
用 LangChain4j+Ollama 打造 Text-to-SQL AI Agent,数据库想问就问
本文介绍了如何利用AI技术简化SQL查询操作,让不懂技术的用户也能轻松从数据库中获取信息。通过本地部署PostgreSQL数据库和Ollama模型,结合Java代码,实现将自然语言问题自动转换为SQL查询,并将结果以易懂的方式呈现。整个流程简单直观,适合初学者动手实践,同时也展示了AI在数据查询中的潜力与局限。
1562 8
|
SQL 人工智能 Linux
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
547 5
|
SQL 缓存 监控
SqlRest让SQL秒变Http API,还支持20+数据库(含国产数据库)
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
SQL 存储 数据库
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
1654 0
|
SQL 人工智能 数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
1191 0
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
870 0
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。