2 votes

Mon erreur sql Subquery retourne plus d'une ligne

SELECT * ,
  (SELECT ZoneName 
   FROM zone_message_master 
   WHERE ZoneID = zoneid) 'ZoneName' 
FROM zone_master 
WHERE ZoneID=zoneid;

Il s'agit d'une requête s'exécutant dans une procédure stockée et je reçois l'erreur suivante

Une sous-requête renvoie plus d'une ligne

Quelqu'un peut-il me dire ce que j'ai fait de mal ici ?

2voto

Mahmoud Gamal Points 46598

Qu'est-ce que j'ai fait de mal ici ?

L'erreur, que vous avez eue, est assez claire. La sous-requête doit retourner exactement une ligne, vous pouvez limiter le nombre de lignes en utilisant la commande ORDER BY ... LIMIT 1 .

Comment puis-je réparer ça ?

Vous n'aviez pas besoin d'une sous-requête pour ça, JOIN les deux tableaux directement à la place, comme suit :

SELECT z.ZoneId, zm.ZoneName
FROM zone_message_master zm
INNER JOIN zone_master z ON zm.ZoneId = z.ZoneId

1voto

alex Points 3316

Cela signifie que vous avez plus d'une entrée dans zone_message_master pour votre zoneid . Cette requête sera plus correcte :

SELECT zm.* , zmm.ZoneName 
FROM zone_master zm
JOIN zone_message_master zmm ON zm.ZoneID=zmm.ZoneID
WHERE zm.ZoneID=zoneid;

0voto

WojtusJ Points 1306

Le problème est probablement aussi clair que le message d'erreur que vous avez reçu. Vous pouvez faire en sorte que la sous-requête ne renvoie qu'une seule ligne, mais ce n'est pas le cas. Votre intention, telle que je la vois, est que la table zone_message_master devraient avoir un ZoneID valeurs. Pour être correct, vous devez créer un index unique sur zone_message_master.ZoneID colonne. Cela nécessitera bien sûr un certain nettoyage de cette table, mais vous pourrez enfin être sûr que tout fonctionne correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X