sql中的Update语句为什么不能用表的别名

本文通过实例解析了SQL中更新语句的正确使用方法,并对比了常见错误写法与标准写法的区别,帮助读者理解如何正确地使用别名进行更新操作。

说来好笑,一直写简单的CRUD语句都没注意过这个问题.我们一直写Update语句都是这样的:

  1. UPDATE [TABLESET TID=1,TNAME='Name',TClass=1 WHERE ID=10  


这样写很简单,也很方便,所以就一直这样用了,今天在写的时候有一个子查询,想用别名来区别,就跟着这种逻辑这样写下去了:

  1. UPDATE [TABLEAS T SET T.TID=1,T.TNAME='Name',T.TClass=1 WHERE T.ID=10  


在写的时候就已经提示语法错误了,还得去看看度娘是怎么解释,看了之后才恍然大悟,原来我们一直写的update语句都是简写过的,应该按照下面的规范语法来写:

  1. UPDATE T SET T.TID=1,T.TNAME='Name',T.TClass=1 FROM [TABLE] T WHERE T.ID=10  
SQL Server 中,`UPDATE` 语句是**可以使用 JOIN** 的。这种写法常用于根据另一个的数据来更新当前的某些字段。 以下是一个标准的带有 `JOIN` 的 `UPDATE` 语句示例: --- ### ✅ 示例:使用 JOIN 更新数据 假设我们有两个: - `Employees` (员工信息): - `EmployeeID` - `Name` - `Salary` - `SalaryAdjustments` (薪资调整记录): - `EmployeeID` - `NewSalary` 我们要根据 `SalaryAdjustments` 中的新工资值来更新 `Employees` 中的工资。 ```sql UPDATE e SET e.Salary = sa.NewSalary FROM Employees e JOIN SalaryAdjustments sa ON e.EmployeeID = sa.EmployeeID; ``` --- ### 🔍 解释: - `UPDATE e`: 指定要更新的是 `Employees` 别名 `e` - `SET e.Salary = sa.NewSalary`: 将 `Employees` 的 `Salary` 字段设置为 `SalaryAdjustments` 中的 `NewSalary` - `FROM Employees e JOIN SalaryAdjustments sa ON ...`: 使用 `JOIN` 来关联两个,通过 `EmployeeID` 匹配需要更新的记录 --- ### 📌 注意事项: 1. **只更新匹配项**:只有那些能在 `JOIN` 条件中匹配到的记录才会被更新。 2. **避免多对一更新导致错误更新**:如果 `JOIN` 后出现一对多的情况,SQL Server 会取其中一个值进行更新,这可能导致逻辑错误,应确保连接是一对一或用子查询控制。 3. **性能优化**:在大上执行带 `JOIN` 的 `UPDATE` 时,建议在连接字段上有索引以提高效率。 --- ### ✅ 另一种写法(使用 CTE): 你也可以使用 `CTE`(Common Table Expression)来进行更新,逻辑更清晰: ```sql WITH UpdateData AS ( SELECT e.EmployeeID, sa.NewSalary FROM Employees e JOIN SalaryAdjustments sa ON e.EmployeeID = sa.EmployeeID ) UPDATE Employees SET Salary = ud.NewSalary FROM UpdateData ud WHERE Employees.EmployeeID = ud.EmployeeID; ``` ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值