SQL更新数据时多个字段时合在一起的写法

作者:iamlaosong

正常更新一个表中多个字段时,字段是分开写的,例如:

update tb_county t
   set t.prov_name = '安徽', t.city_name = '合肥市', t.xs_mc = '庐阳区'
 where t.xs_code = '2300';

可是,更新的值如果来自一个子查询,则这些字段是可以合在一起写的,例如:

update tb_county t
   set (t.prov_name, t.city_name, t.xs_mc) = (select t.prov_name,
                                                     t.city_name,
                                                     t.xs_mc
                                                from tb_yzbm t
                                               where t.postcode = '230000')
 where t.xs_code = '2300';

由此,我们可以将第一条语句改写为:

update tb_county t
   set (t.prov_name, t.city_name, t.xs_mc) = (select '安徽',
                                                     '合肥市',
                                                     '庐阳区'
                                                from dual)
 where t.xs_code = '2300';

这样的写法人机交互时没什么好处,但是编程实现更新语句时,这样的格式合成update语句要简单的多。

时间: 2024-07-29 07:15:34

SQL更新数据时多个字段时合在一起的写法的相关文章

SQL 更新数据时触发器造成的性能问题

有时候,我们更新数据时,发现更新的时间很长,一般我们会想到查询的性能很慢,是索引引起的.但有时候不一定,触发器也会造成性能问题. 我们需要在更新数据时,先禁用触发器,然后再恢复 1 --禁用触发器 2 DISABLE TRIGGER 触发器名称 ON 表 3 --启用触发器 4 ENABLE TRIGGER 触发器名称 ON 表

hibernate通过SQL更新数据

1 @Resource(name = "hibernateTemplate") 2 public HibernateTemplate hibernateTemplate; 3 4 /** 5 * @Title: updateBySQL 6 * @Description: TODO(sql更新) 7 * @param @param sql sql语句 8 * @param @param obj 参数 9 * @param @return 10 * @return int 更新数量 11

sql 所有数据表中 插入字段

declare @tablename varchar(200)declare @sql varchar(2000)declare cur_t cursor forselect name from sysobjects where xtype= 'U ' and status> =0 and name not in (select name from sysobjects where id in (select id from syscolumns where id in (select id f

SQL中使用UPDATE更新数据时一定要记得WHERE子句

我们在使用 SQL 中的 UPDATE 更新数据时,一般都不会更新表中的左右数据,所以我们更新的数据的 SQL 语句中会带有 WHERE 子句,如果没有WHERE子句,就回更新表中所有的数据,在 mysql 中,我们可以设置sql_safe_updates 这个自带的参数来解决,,当该参数开启的情况下,我们必须在 UPDATE 语句后携带 WHERE 条件,否则就会报错.set sql_safe_updates=1; 表示开启该参数.下面是开启sql_safe_updates参数后不带  WHE

数据库更新数据时的传值问题

如果数据库中有多列值时,但是不定个数更新是需要采取“先通过查找数据库中的所有数据保存为一个model类,再给相应要改变的值复制,其他的更新的值保持原有数据不变” 比如:DAL(数据访问层) /// <summary> /// 更新数据,虽然有的时候只是更新某个值,其他的值可以原样更新.在更新之前先要查询一下原有的数据,以便于不更新没必要的更新 /// </summary> /// <param name="model"></param>

更新数据时如何使时间自动更新

更新数据时不能使用time类型 使用timestamp类型才可以自动获取当前系统时间 TIMESTAMP的变体 1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  在创建新记录和修改现有记录的时候都对这个数据列刷新 2,TIMESTAMP DEFAULT CURRENT_TIMESTAMP  在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它 3,TIMESTAMP ON UPDATE CURRE

Mysql更新数据时,报 “You can&#39;t specify target table &#39;message &#39; for update in FROM clause” 解决办法

报错的SQL为: delete from message where id not in  (select min(id) as id from message group by content); 报错信息的中文意思为:不能在FROM子句中更新  message表数据,原因是 "不能在从本表中查出数据范围后,然后直接更新本表", 解决方法思路是,让数据库认为,你查出的数据范围,是不从本表中查出来的,实现步骤如下: 1.用as,给查出的数据表,设置别名为a,即 (select min(

List某字段相同时将其他字段数据相加

eg:List<User>中,User有id和money两个字段,如果id相同,就把User合并,即将money相加. (代码中前段内容是两个list的追加,list1后面追加list2,最后存放在list1中) 数据:1:10;2:20;1:40 输出:1:50;2:20 User.java package list; public class User { private String id; private int money; public String getId() { retur

FragmentPageAdapter切换时无法更新数据问题解析

在一个 Android 应用中,我们可以使用 FragmentPageAdapter 来处理多 Fragment 页面的横向滑动.但是当 Fragment 对应的数据集发生改变时,我们都希望能够通过调用 mAdapter.notifyDataSetChanged() 来触发 Fragment 页面使用新的数据调整或重新生成其内容,可是当我们使用 notifyDataSetChanged() 后,我们会发现这个方法不会生效.那为什么会这样呢,之前遇到了相同的问题一直没法解决,在网上给出的乱七八糟的