【问题标题】:Subquery error message while running query运行查询时出现子查询错误消息
【发布时间】:2019-05-09 00:46:26
【问题描述】:
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 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

【问题讨论】:

  • 邮件的哪一部分你不明白?您的查询有一个子查询,并且消息似乎很清楚。
  • whats wrong in the code> 为什么我会收到此错误消息?
  • 如果您从一些介绍开始,这个问题会更容易阅读。请看How do I ask a good question
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(25 多年前),不鼓励使用它

标签: sql subquery


【解决方案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 上添加连接条件)或仅返回一行的子查询。

尽管上面的内容非常做作,但这就是错误告诉你的内容。

【讨论】:

  • @Abhilasha_Joshi 如果这对您有所帮助,您能否接受答案(点击答案旁边的灰色复选标记)并投票?谢谢。
猜你喜欢
  • 2017-01-10
  • 1970-01-01
  • 2021-06-27
  • 2019-01-03
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
相关资源
最近更新 更多