【问题标题】:SQL subquery error, returned more than 1 valueSQL 子查询错误,返回超过 1 个值
【发布时间】:2020-02-13 09:38:39
【问题描述】:

我正在尝试编写查询,但我不知道为什么会收到一条错误消息:

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

SELECT CAST(Title AS CHAR(30)) AS 'Title'
     , CAST(Content AS CHAR(70)) AS 'Content'
     , PostedDate AS 'Date'
     , CAST( ISNULL(
        (SELECT Upvote
        FROM Ratings
        WHERE Ratings.FK_PostID = Posts.PostID)
        , 0) AS CHAR(10) ) AS 'Upvotes' 
FROM Posts
;

【问题讨论】:

  • 错误似乎很明显。你不明白哪一部分?

标签: sql subquery


【解决方案1】:

大概,您想要countsum 这些值。如果是这样:

SELECT p.Title, p.Content, p.PostedDate AS Date,
       (SELECT SUM(r.Upvote)
        FROM Ratings r
        WHERE r.FK_PostID = p.PostID
       ) as Upvotes
FROM Posts p;

注意事项:

  • SUM(r.upvote) 可能不是正确的逻辑。也许你想要COUNT(*) 或类似的东西。
  • 我认为没有理由将列转换为字符串。
  • 仅对字符串和日期常量使用单引号。

【讨论】:

    【解决方案2】:

    我假设您想获得每个帖子的投票数?为什么不直接使用连接:

    SELECT p.Title,  p.Content, p.PostedDate AS 'Date', COUNT(r.Upvote) AS 'Upvotes'
                             FROM Posts p
                             LEFT JOIN Ratings r ON r.FK_PostID = p.PostID
                             GROUP BY p.PostID, p.Title ORDER BY p.PostID ASC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多