2009-03-12 6 views
0

Dans mon application rails, je lance une requête sql en utilisant find_by_sql() car j'ai besoin de sous-requêtes. Cela fonctionne si je fais la première ou deuxième requête, mais quand je les ajoute avec l'AND, il commence à se plaindre de plus de 1 ligne dans la sous-requête.Mysql :: Erreur: La sous-requête renvoie plus de 1 ligne:

Je souhaite que toutes les lignes (enregistrements) renvoyées correspondent aux critères. Qu'est-ce qui doit être réparé/change ici? Qu'est-ce qui dit mysql que je veux seulement 1 ligne?

Voici le SQL résultante vu dans les rails log:

Mysql::Error: Subquery returns more than 1 row: select p.* from policies p 
where exists (select 0 from status_changes sc join statuses s on sc.status_id = s.id 
where sc.policy_id = p.id 
and s.status_category_id = '1' 
and sc.created_at between '2009-03-10' and '2009-03-12') 
or exists 
(select 0 from status_changes sc join statuses s on sc.status_id = s.id 
where sc.created_at in 
(select max(sc2.created_at) 
from status_changes sc2 
where sc2.policy_id = p.id 
and sc2.created_at < '2009-03-10') 
and s.status_category_id = '1' 
and sc.policy_id = p.id) 
AND (select 0 from status_changes sc 
where sc.policy_id = p.id 
and sc.status_id = 7 
and sc.created_at between '2008-12-31' and '2009-03-12') 
or exists 
(select 0 from status_changes sc 
where sc.created_at in 
(select max(sc2.created_at) 
from status_changes sc2 
where sc2.policy_id = p.id 
and sc2.created_at < '2008-12-31') 
and sc.status_id = 7 
and sc.policy_id = p.id) 

Répondre

4

Cette ligne:

AND (select 0 from status_changes sc 

devrait-il pas être

AND exists (select 0 from status_changes sc 
+2

vous da man! - merci – Streamline

-3

que le retour plus Subqueries que 1 rangée n'est supportée par aucun serveur SQL, autant que je sache.

+0

C'est un non-sens. – Tomalak

+0

Sélectionner l'identifiant, le nom de l'utilisateur où l'identifiant est (Sélectionner l'identifiant Depuis l'utilisateur actif)? – Petruza

Questions connexes