考虑一个包含一列的表,该列具有相同的100行值和另一列唯一值。使用select查询来检索返回值的行值。
这是我的表结构:
id column_1
1 q
2 q
3 q
4 q
. .
. .
100 q
这是我的问题:
DECLARE @UserId INT
SELECT @UserId = Table_1.column_2 FROM [Table_1] WHERE [Table_1].[Column_1] = 'q'
select @UserId
it returns 100 th row value,
我可以知道为什么这个值来自而不是匹配条件的第一个id?
答案 0 :(得分:0)
当您为SELECT
子句中的变量赋值时,根据结果的排序顺序,查询返回的所有值将从第一个到最后一个逐个分配给变量。 / p>
在这种情况下,返回100行,分配给变量的值将是结果集中的最后一个值,即第100行的值。
如果要分配与条件匹配的第一个值,请使用TOP
关键字来限制返回的行数。请记住,如果没有明确的ORDER BY
子句,则无法保证输出的排序顺序,因此如果您想要一致的结果,最好添加它。
示例:
DECLARE @UserId INT;
SELECT TOP(1) @UserId = Table_1.column_2
FROM [Table_1]
WHERE [Table_1].[Column_1] = 'q'
ORDER BY id;
答案 1 :(得分:0)
SELECT @UserId = Table_1.column_2 FROM [Table_1] WHERE [Table_1].[Column_1] = 'q'
这会产生100个结果行,每个行重新分配@UserId。
最后选择的记录似乎是值为100的记录,所以
select @UserId
返回100.它可能是表中的任何其他值,因为您没有指定读取记录的顺序(但是没有ORDER BY
子句)。
但是你为什么还要选择所有唱片呢?您只对一条记录感兴趣,该记录是您要将其放入变量的值。因此,只选择一个结果值,例如:
SELECT @UserId = MIN(column_2) FROM Table_1 WHERE Column_1 = 'q'