recherche

Maison  >  Questions et réponses  >  le corps du texte

Résolvez l'erreur selon laquelle le résultat MySQL contient plusieurs lignes

Lorsque j'exécute cette requête, j'obtiens ce message d'erreur "Code d'erreur : 1172. Le résultat contient plusieurs lignes"

CREATE DEFINER=`root`@`localhost` PROCEDURE `un_follow`(
  user_been_following_id int,
  user_following_id int
)
BEGIN
    declare id int;
    select following_id into id from user_following
        where user_been_following_id = user_been_following_id
        and  user_following_id =  user_following_id; 
        
    delete from user_following 
    where following_id = id;
END
Est-il utile que

id soit la clé primaire du tableau ci-dessous ?

P粉068174996P粉068174996229 Il y a quelques jours420

répondre à tous(1)je répondrai

  • P粉322319601

    P粉3223196012024-04-05 13:11:10

    Votre variable locale porte le même nom que la colonne du tableau. De cette façon, vous ne comparez jamais la variable locale à la colonne, mais toujours à la variable locale elle-même.

    Votre requête doit renvoyer exactement une ligne pour fournir la variable id

    select following_id into id from user_following
        where user_been_following_id = user_been_following_id
        and  user_following_id =  user_following_id;

    user_been_following_id et user_following_id sont interprétés comme des variables locales dans toutes les instances et sont donc traduits comme suit

    select following_id into id from user_following
        where 1 = 1
        and  1 = 1;

    Toutes les lignes où user_following est renvoyé. Pour résoudre ce problème, renommez vos variables locales comme

    CREATE DEFINER=`root`@`localhost` PROCEDURE `un_follow`(
      local_user_been_following_id int,
      local_user_following_id int
    )
    BEGIN
        declare id int;
        select following_id into id from user_following
            where user_been_following_id = local_user_been_following_id
            and  user_following_id =  local_user_following_id; 
        
        delete from user_following 
        where following_id = id;
    END

    (en supposant qu'il n'y ait pas de colonne nommée local_user_been_following_id ou local_user_following_id sur la table user_following)

    Voir aussi ici : https://dev.mysql.com/doc/ refman/8.0/en/local-variable-scope.html

    répondre
    0
  • Annulerrépondre