`

Sql Update语句使用表别名的方法

阅读更多

http://database.51cto.com/art/201009/227874_all.htm

 

在select中使用表别名很多人都知道,但是在Sql Update中使用表别名可能知道的人就没那么多了,下面就为您介绍这种Sql Update语句使用表别名的方法,供您参考。

AD:2013云计算架构师峰会课程资料下载

 

使用Sql Update语句,同样可以使用表别名,下面就将为您介绍Sql Update语句使用表别名的方法,希望对您学习Sql Update语句有所启迪。

在编写Sql脚本时通过表别名可以大大缩减Sql代码,同时表别名也是解决同表多次引用的手段之一。在select中使用表别名大家应该都很熟悉了:

  1. select * from TableA as A inner join TableB as B on A.Key1 = B.Key1  

但是在Sql Update中使用表别名可能就没那么多人知道了。

  1. update T    
  2.  
  3. set T.Key1 = 'xxxx'   
  4.  
  5. from TableA T  

这些天在写Sql Update语句脚本的时候需要引用两次同个表对象,如果直接像下面这样引用两次TableA则会抛出“The multi-part identifier ‘TableA.Index’ could not be bound”的错误。这是因为Sql引擎无法知道你在where子句中的TableA到底指的是要Update的表还是from后面的表。
 

  1. update TableA    
  2.  
  3. set TTableA.NextKey = T.Key   
  4.  
  5. from TableA T    
  6.  
  7. where T.Index = TableA.Index + 1   

如果不对Update后面的TableA使用别名的话,我们只能通过以下方法来实现。

  1. update TableA    
  2.  
  3. set TTableA.NextKey = T.Key   
  4.  
  5. from    
  6.  
  7. (    
  8.  
  9. select * from TableA    
  10.  
  11. )T    
  12.  
  13.  where T.Index = TableA.Index + 1  

使用别名可以得到更简洁的写法:

  1. update T1    
  2.  
  3. set T1.NextKey = T2.Key   
  4.  
  5. from TableA T1, TableA T2    
  6.  
  7. whereT2.Index = T1.Index + 1  

 

 

【编辑推荐】

Sql Server视图的概念

使用SQL查询连续号码段的方法

实现子孙树查询的经典SQL语句

查询表的字段名的sql语句写法

SQL查询最大最小值的示例

 

 

 

  • SQL Server中Delete语句表名不能用别名

  • 昨天,无意中发现程序中数据分析的结果不对,重新进行分析后,原数据仍在,有值的字段被累计。心说,不对啊,是重新生成记录后才分析的啊。难道忘了 DELETE 了?查代码,发现有删除语句。

        于是在查询分析器中执行,报错。反复试几次,明白了,Delete From 不认表名别名!回头想下,当初程序改完后主要是在Oracle中测的,SQLServer 一直没细测。

        之所以要用别名,是因为 where 条件中需要用到子查询写一些条件,下面不写那么复杂,仅说明一下问题。

    结论:
    delete from TABLEA A where A.FIELD1=10        (ORACLE适用)
    delete TABLEA from TABLEA A where A.FIELD1=10 (SQLSERVER适用)
    delete  from TABLEA where TABLEA.FIELD1=10    (Ora/SQL均适用)

分享到:
评论

相关推荐

    ORACLE_多表关联_UPDATE_语句

    把其它表作为条件和更新值的更新语句;... update customers a -- 使用别名 set customer_type='01' --01 为vip,00为普通 where exists (select 1 from tmp_cust_city b where b.customer_id=a.customer_id )

    Sql 语句详解

    8. SQL UPDATE 语句 12 9. SQL DELETE 语句 13 10. SQL TOP 子句 13 11. SQL LIKE 操作符 15 12. SQL 通配符 16 13. SQL IN 操作符 18 14. SQL BETWEEN 操作符 18 15. SQL Alias(别名) 19 16. SQL JOIN 20 17. SQL...

    sql语句生成器+支持各大数据库+说明书

    SQL语句生成器的特色 支持几乎所有类型的数据库, 包括小型(桌面)数据库:Fox DBF、Microsoft Execl、Text、Borland ...支持将SQL查询语句,替换为插入(Insert into)和更新(Update)语句  附属工具内嵌入Delphi IDE

    SQL语句自动生成工具

    无需安装和卸载 支持几乎所有的SQL语法: 排序(Order By) 条件(Where) 分组(Group By) 分组条件(Having) 计算字段 SQL查询表 SQL查询子句 丰富的函数 表别名 字段别名(包括计算...

    SQL语句生成及分析器

    该工具的主要特色: 1、支持几乎所有类型的数据库, ...6、支持将SQL查询语句,替换为插入(Insert into)和更新(Update)语句 7、附属工具内嵌入Delphi IDE(支持Delphi 5和Delphi 6) 8、文件拖放(SQL和TXT文件)

    SqlServer中批量update语句

    现在我有两张表分别是S_PERSON,S_USER S_PERSON  S_USER 我现在想把S_USER表中的ACCOUNT批量修改成S_PERSON的ACCOUNT 我们可以发现S_USER表中有个跟S_PERSON表关联...1、使用表名称别名 有两个表分别是:”Persons”

    经典SQL语句大全

    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...

    sqlserver中delete、update中使用表别名和oracle的区别

    查代码,发现有删除语句。于是在查询分析器中执行,报错。反复试几次,明白了,Delete From不认表名别名!回头想下,当初程序改完后主要是在Oracle中测的,SQLServer一直没细测。 之所以要用别名,是因为where条件中...

    sql server的 update from 语句的深究

    一般来说update一个表, 使用where语句即可: 代码如下: UPDATE Ttest SET  statusInd = ‘ACTIVE’  WHERE  id = 123 注意: update 语句后面的table名称,是不可以启用别名的。 那么此时的id字段,就是来自...

    SQL语句自动生成器简体中文版

    无需安装和卸载 支持几乎所有的SQL语法: 排序(Order By) 条件(Where) 分组(Group By) 分组条件(Having) 计算字段 SQL查询表 SQL查询子句 丰富的函数 表别名 字段别名(包括计算...

    SQL语句生成及分析器(中文绿色)

    1、支持绝大部分数据库,包括 大型数据库Oracle,Sybase(包括SQL AnyWhere),DB2,MS_SQL 中型数据库MS_Access,MySQL 桌面型数据库Paradox,DBF系列数据库... 10.4 简单SQL查询语句转换为Delete,Update,Insert语句

    精通sql结构化查询语句

    11.1.4 由VALUES关键字插入多行数据 11.1.5 使用SELECT语句插入数据 11.1.6 通过视图插入数据 11.1.7 使用子查询插入数据 11.2 数据的更新操作 11.2.1 UPDATE语句的基本语法 11.2.2 使用UPDATE语句更新指定的列值 ...

    SQL语言生成器(delphi)

    1、支持几乎所有类型的数据库, 包括小型(桌面)数据库:Fox DBF、Microsoft Execl、Text、Borland Paradox、 ...4、支持将SQL查询语句,替换为插入(Insert into)和更新(Update)语句 4、附属工具内嵌入Delphi IDE

    经典全面的SQL语句大全

     9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)  10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select *...

    sql语句生成与分析器.rar

    11.4 简单SQL查询语句转换为Delete,Update,Insert语句 11.5 复制为字符串(支持对Java、C#、Delphi、VB、PowerBuilder开发语言的支持) 11.6 灵活的拖放功能 11.7 在线版本更新 11.8 查询结果输出为SQL脚本...

    sql经典语句一部分

    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...

    mysql修改语句修改单表中的记录

    1. 语法修改单表中的记录update 表名set 列=新值, ...where 筛选条件修改多表的记录sql92语法:update 表1 as 别名, 表2 as 别名set 列=新值, ...where 连接条件and 筛选条件sql99语法:update 表1 as 别名join 表2 ...

    SQL语句大全.docx

    14.查询的时候 可以给 表 或者 列 起别名 Select 列名1 [as] 别名 , 列名2 [as] 别名2 from 表名 别名 15.去重查询 16.条件查询 练习1 年龄大于 25的学生 > < >= != <> = 17.多条件查询 & and || or 18....

    Mysql数据库之常用sql语句进阶与总结

    本文实例讲述了Mysql数据库之常用sql语句。分享给大家供大家参考,具体如下: ...————使用as给表起别名 select 表别名.字段名 from 表名 as 表别名; ————消除重复行(distinct) select dis

    精通SQL--结构化查询语言详解

    9.2.4 使用表别名 162 9.2.5 采用join关键字建立连接 163 9.3 表的连接类型 163 9.3.1 自连接 163 9.3.2 自然连接(natural join) 166 9.3.3 内连接(inner join) 167 9.3.4 外连接(outer join) 170 ...

Global site tag (gtag.js) - Google Analytics