sql - 运行查询时子查询错误消息
问题描述
UPDATE rm
SET rm.cost_sqft = ISNULL((SELECT
CASE
WHEN (rm.rm_cat IN ('8','NON-REPORT') AND rm.space_fee = 'No')
THEN '0'
ELSE rent_w.w * @rental_rate
END
FROM
@rental_weight AS rent_w, bl, rm
WHERE
rm.main_contact = rent_w.space_type
AND rm.description = rent_w.space_quality
AND bl.cost_type = rent_w.campuse_cost
AND bl.bl_id = rm.bl_id),'0')
WHERE rm.bl_id = @bl_id
AND rm.fl_id = @fl_id
AND rm.rm_id = @rm_id
运行此语句时,我收到此错误:
消息 512,级别 16,状态 1,过程 icat_rm_cost_sqft,第 100 行 [批处理开始第 2 行]
子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。
解决方案
该错误意味着子查询(选择)为要应用于更新的给定键返回多行。
考虑一下更新变成这种非常人为的场景的场景:
名为 Customer 的表中的示例数据:
cust_id cust_type name
1 X Fred
1 Y jack
以及将产生错误的查询:
update customer
set name = (
select "MR " || name
from customer
where cust_id = 1 /* returns Fred and Jack */
)
where cust_id = 1 and cust_type = 'X';
客户 1X 应更新为什么名称?“弗雷德先生”还是“杰克先生”?RDBMS 无法为您做出决定,您需要将查询修改为相关子查询(在 cust_type 上添加连接条件)或仅返回一行的子查询。
当然,上述内容非常做作,但这就是错误告诉您的内容。
推荐阅读
- c++ - 即使某些数字匹配,程序也始终显示 0 个匹配项
- javascript - 检查元素是否存在并获取属性
- python - 如何在 Python 中使用带有 if/else 的列表
- python - 多处理 - 进程似乎没有并行执行
- python - 如何在python中发送301 Moved Permanently响应?
- c# - 在 Winforms 中创建项目及其属性的可滚动列表
- flutter - 抖音滑动效果:如何全屏垂直滚动?
- php - 如何在四个条件状态下查看提前 2 个月之前的日期
- blazor-server-side - Blazor Server 创建链接以从字节数组下载文件
- spring-boot - 如何将 Spring Boot 项目迁移到遗留 Spring MVC 项目。面临问题,如何在遗留 Spring MVC 项目中读取 application.properties 文件