Comment définir la variable 1ère valeur du résultat de la sous-requête dans SQL

Je ne suis pas très bon avec SQL, alors aidez-moi s'il vous plaît. Dans ma procédure stockée, j'obtiens un paramètre. Ensuite, en fonction de ce paramètre, je veux get l'ID d'une autre table et mettre cet ID dans mon autre variable, mais le problème est que l'ID peut être multiple en fonction de ce paramètre.

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

Ici, je reçois l'erreur, car Subquery returned more than 1 value Comment get la première valeur du résultat de la sous-requête et définir le @RateID?

Vous pouvez vouloir l'essayer comme ceci:

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

Comme dans votre requête actuelle, il se peut que votre table ait plus d'une ligne qui satisfasse à la condition Rate = 160 , ainsi la requête select returnnera plus d'une ligne que vous ne pouvez pas stocker dans une seule variable.

Cependant, dans MYSQL vous devez utiliser LIMIT 1 car TOP 1 ne fonctionnera pas dans MYSQL.

Si vous voulez seulement le premier résultat, vous pouvez le faire

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

au lieu de

 Select [dbo].[Rate].RateID 

Vous pouvez utiliser la requête Haut comme SET @RateID = ( Select Top 1 [dbo].[Rate].RateID from [dbo].[Rate] Where [dbo].[Rate].Rate = 160
)
SET @RateID = ( Select Top 1 [dbo].[Rate].RateID from [dbo].[Rate] Where [dbo].[Rate].Rate = 160
)

Vous pouvez utiliser la syntaxe suivante:

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

Si vous voulez le dernier, vous pouvez changer l'ordre en:

 order by RateId Desc 

Sql Fiddle Exemple