如何在SQL中将子查询结果设置为变量1st值

时间:2013-11-27 17:24:27

标签: mysql sql sql-server

我对SQL不太满意,请帮助我。 在我的存储过程中,我得到一个参数。 然后,基于此参数,我想从另一个表中获取ID并将此ID放入我的另一个变量中,但问题是ID可能是基于此参数的多个。

DECLARE @RateID int;

SET @RateID = (
    Select [dbo].[Rate].RateID
    from [dbo].[Rate]
    Where [dbo].[Rate].Rate = 160       
)

我收到错误,因为Subquery returned more than 1 value 如何从子查询结果中获取第一个值并设置为@RateID?

4 个答案:

答案 0 :(得分:2)

你可能想这样试试:

DECLARE @RateID int;

SET @RateID = (
    Select Top 1 [dbo].[Rate].RateID
    from [dbo].[Rate]
    Where [dbo].[Rate].Rate = 160       
)

在您当前的查询中,可能存在这样一种情况,即您的表有多于一行满足条件Rate = 160,因此select查询将返回超过1行,您无法存储一个变量。

但是在 MYSQL 中,您必须使用LIMIT 1,因为TOP 1在MYSQL中不起作用。

答案 1 :(得分:1)

如果您只想要第一个结果

Select TOP 1 [dbo].[Rate].RateID

取代

Select [dbo].[Rate].RateID

答案 2 :(得分:1)

您可以使用SET @RateID = ( Select Top 1 [dbo].[Rate].RateID from [dbo].[Rate] Where [dbo].[Rate].Rate = 160
)

等热门查询

答案 3 :(得分:1)

您可以使用以下语法:

Select top 1
  @RateId = RateId
from
  Rate
where
  Rate.Rate = @Rate
order by
  RateId

如果您想要最后一个,可以将订单更改为:

order by
    RateId Desc

Sql Fiddle Example