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