8
votes

Violation en cardinalité sur la requête MySQL

im obtenir une erreur sur cette requête: xxx

erreur:

VIOLATION CARDINALITÉ: 1242 SUBQUERY retourne plus d'une ligne

Je sais que cela pourrait être résolu en utilisant une déclaration de jointure, mais je ne sais pas comment résoudre ce problème.

Pour clarifier davantage ma question, j'ai deux tables, utilisateur et userinfo:

utilisateur xxx

userinfo xxx

L'information info_id à partir de utilisateur est lié à l'ID de userinfo , donc avoir une liste d'identifiants userinfo dans ce format (1,4,7,8,9 ) Je souhaite nom et nom de famille (à partir de userinfo ) et nom d'utilisateur à partir de utilisateur correspondant à l'info_id


1 commentaires

(sélectionnez u.Ausername à partir de l'utilisateur u où u.info_id in (1,9,10,15,25,40,42,43,44)) retourne plus d'un élément et ne peut pas être manipulé .


4 Réponses :


12
votes

Vous devez spécifier la relation entre les deux table dans la sous-requête corrélée, xxx

et en utilisant joindre ( que j'ai préféré plus ) xxx

Pour obtenir plus de connaissances sur les jointures, veuillez visiter le lien ci-dessous:


2 commentaires

Pourquoi préférez-vous la syntaxe ?


@Bseven ANSI vs. NON-ANSI SQL Syntaxe



1
votes
SELECT i.name, i.surname, u.username as email 
FROM `userinfo` i 
     INNER JOIN
     `user` u ON i.info_id=u.id
WHERE i.id IN (1,9,10,15,25,40,42,43,44)
Learn to use joins, without them you are working wit both hands tied behind your back AND blindfolded. Joins are how to use the Relational part of Relational Databases.

1 commentaires

Le plus compact mais lisible, et le fait de ne pas savoir que les jointures est travailler avec les deux mains attachées derrière votre dos aussi.



2
votes

Vous êtes uniquement autorisé à renvoyer une ligne dans une liste de terrain. Il semble que vous souhaitiez regrouper les résultats.

SELECT
    i.name, i.surname,
    GROUP_CONCAT(u.username) AS email
FROM
    userinfo i
    JOIN user u ON (i.id = u.info_id)
WHERE
    i.id IN (1,9,10,15,25,40,42,43,44)
GROUP BY
    i.id


0 commentaires

0
votes

Voulez-vous dire: xxx


0 commentaires