【问题标题】:How to use Subquery which returned more than one result如何使用返回多个结果的子查询
【发布时间】:2011-08-18 13:16:47
【问题描述】:

我的 SQL 查询

UPDATE Task SET Done = 1 WHERE (ID = (SELECT ID FROM User WHERE UserName = @UserName) 

我试过了,但出错了:

子查询返回超过 1 个值。这是不允许的,当 子查询遵循 =、!=、、>= 或当子查询用作 一种表达。声明已终止。

是否有任何可能的方法来做到这一点(例如 for 循环)?谢谢

【问题讨论】:

  • 您有多个同名用户名?这听起来很奇怪。也许您忘记传递参数并且您有空白用户名? (这还是很奇怪?)。
  • @gbianchi - 您在允许重复用户名的网站上发布该评论,因此它实际上并不是一个奇怪的概念。

标签: sql tsql subquery


【解决方案1】:

一行的 ID 怎么会等于多个值?

这没有意义,这就是为什么编写这样的查询是不可能的。

不过,检查 ID 是否在集合中是有意义的......

...WHERE ID IN (SELECT ID...

【讨论】:

    【解决方案2】:

    您可以使用IN 运算符。

    WHERE ID IN (SELECT ID FROM User WHERE UserName = @UserName)
    

    【讨论】:

      【解决方案3】:

      UPDATE Task SET Done = 1 WHERE ID IN (SELECT ID FROM User WHERE UserName = @UserName)

      【讨论】:

        【解决方案4】:

        以下如何。您可以像在 SELECT 语句中一样使用简单连接:

        UPDATE Task t, User u 
        SET t.Done = 1 
        WHERE t.ID = u.ID
        AND u.UserName = @UserName
        

        【讨论】:

          猜你喜欢
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-06
          • 2012-10-28
          • 2010-09-25
          • 2020-10-23
          • 2020-11-25
          相关资源
          最近更新 更多