如何解决如何从 SQL 查询的第 n 行设置变量
DECLARE @value int;
SET @value = (SELECT *
FROM
(SELECT
ROW_NUMBER() OVER (ORDER BY ID ASC) AS rownumber
FROM
(SELECT ID FROM Users
WHERE ID NOT IN (SELECT UserID FROM UserFavoritePlaces))
) AS foo
WHERE rownumber = 1)
但是我遇到了语法错误
消息 102,级别 15,状态 1,第 31 行
')' 附近的语法不正确
我不知道我做错了什么。
解决方法
您的查询过于复杂。您可以将此方法用作:
SELECT @value = id
FROM (SELECT u.*,ROW_NUMBER() OVER (ORDER BY ID ASC) AS rownumber
FROM Users
WHERE u.ID NOT IN (SELECT ufp.UserID FROM UserFavoritePlaces ufp)
)
WHERE rownumber = 1;
但它可能更简单:
SELECT @value = id
FROM Users
WHERE u.ID NOT IN (SELECT ufp.UserID FROM UserFavoritePlaces ufp)
ORDER BY id
OFFSET 0 FETCH FIRST 1 ROW ONLY;
实际上,对于您尝试的逻辑,最简单的形式是:
SELECT @value = 1;
您正在将值设置为行号。如果这是您的意图,那么 EXIST
通常是更好的方法。
略有不同的布局,语法错误的原因变得清晰...
Declare @value int;
SET @value=
(
SELECT
*
FROM
(
SELECT
ROW_NUMBER() OVER (ORDER BY ID ASC) AS rownumber
FROM
(
SELECT
ID
FROM
Users
WHERE
ID NOT IN (SELECT UserID FROM UserFavoritePlaces)
)
-- NO TABLE ALIAS HERE
)
AS foo
WHERE
rownumber =1
)
此外,您的 foo
表仅有 rownumber
列。因此,即使它执行了,它也会始终返回 1
。
我会做...
SELECT
@value = MIN(ID)
FROM
Users
WHERE
ID NOT IN (SELECT UserID FROM UserFavoritePlaces)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。