Maison  >  Article  >  base de données  >  Comment résoudre l'erreur MySQL La sous-requête renvoie plus d'une ligne

Comment résoudre l'erreur MySQL La sous-requête renvoie plus d'une ligne

PHPz
PHPzavant
2023-05-27 18:49:1310296parcourir

    Erreur mysql : la sous-requête renvoie plus d'une ligne

    Erreur mysql : SQLSTATE[21000] : violation de cardinalité : 1242 La sous-requête renvoie plus d'une ligne

    L'erreur signifie que le résultat de la sous-requête comporte plusieurs lignes.

    L'erreur est signalée comme suit

    Comment résoudre lerreur MySQL La sous-requête renvoie plus dune ligne

    Solution

    Prenez cette instruction SQL comme exemple

    select * from table1 where table1.colums=(select columns from table2);

    1) Si elle est écrite à plusieurs reprises, supprimez les données en double. Lors de l'écriture de données, vous pouvez utiliser un jugement logique (PHP) ou des clés étrangères (MySQL) pour empêcher l'écriture répétée de données.

    (Ce que j'ai rencontré dans le développement réel était une situation d'écriture répétée de données. J'ai trouvé deux données identiques dans la base de données, qui ne répondaient pas aux exigences commerciales d'origine)

    2) Ajoutez la limite 1 à l'instruction conditionnelle de la sous-requête, trouvez-en simplement un qui remplit les conditions

    select * from table1 where table1.colums=(select columns from table2 limit 1);

    3) Ajoutez le mot-clé any avant la sous-requête

    select * from table1 where table1.colums=any(select columns from table2);

    Code d'erreur : 1242 La sous-requête renvoie plus d'une ligne

    Description de l'erreur

    1 requêtes exécutées, 0 succès, 1 erreur, 0 avertissements

    Requête : SELECT t.id, DATE_FORMAT( t.statisTime, '%Y-%m-%d %H:%i:%s' ) statisTime, (SELECT `id` FROM t_truck_info WHERE id = t.plateId ...

    Code d'erreur : 1242La sous-requête renvoie plus d'une ligne

    Temps d'exécution : 0,009 sec Temps de transmission : 0,002 sec Temps total : 0,012 sec

    Raison de l'erreur

    Lors de l'écriture des instructions SQL de requête, l'un des champs est obtenu à partir d'une autre table

    select t.id,(select num from t_user_info where id = stuNo) as amount from t_stu_info t left join t_user_info t0
    on t0.id = t.stuNo

    La requête montre que num est constitué de plusieurs éléments de données, tandis que le résultat de la requête externe nécessite que num soit un seul élément de données

    Solution

    select t.id,(select sum(num) from t_user_info where id = stuNo) as amount from t_stu_info t left join t_user_info t0
    on t0.id = t.stuNo

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer