执行带FROM子句的UPDATE SQL语句时为何FROM部分出现报错?
SQL UPDATE语句FROM子句报错排查方案
你运行的SQL语句如下:
UPDATE a SET a.PropertyAddress = COALESCE(a.PropertyAddress,b.PropertyAddress) FROM nashvillehousing as a JOIN nashvillehousing as b ON a.ParcelID = b.ParcelID WHERE a.UniqueID <> b.UniqueID AND a.PropertyAddress is null;
可按以下步骤排查报错原因:
- 检查数据库是否支持UPDATE-FROM语法:该语法仅PostgreSQL、SQL Server、SQLite 3.33.0及以上版本支持,如果你使用的是MySQL这类不支持该语法的数据库,直接删除FROM子句,将表关联逻辑移到UPDATE之后即可,修改后示例:
UPDATE nashvillehousing a JOIN nashvillehousing b ON a.ParcelID = b.ParcelID SET a.PropertyAddress = COALESCE(a.PropertyAddress,b.PropertyAddress) WHERE a.UniqueID <> b.UniqueID AND a.PropertyAddress is null; - 检查别名使用规则是否符合要求:部分数据库要求UPDATE后直接跟目标表原名,不能直接接别名,可尝试将UPDATE后的a改为原表名
nashvillehousing再测试。 - 检查语法拼写错误:确认表名
nashvillehousing、字段名PropertyAddress、ParcelID、UniqueID没有拼写错误,关联条件、逻辑运算符书写正确。 - 检查账号操作权限:确认当前使用的数据库账号拥有该表的UPDATE权限以及多表查询权限,部分权限限制也会抛出指向FROM子句的错误。
内容的提问来源于stack exchange,提问作者Noble Nelson
相关产品推荐
相关产品推荐

