2009-03-12 13 views
0

In meiner Rails App, ich führe eine SQL-Abfrage mit find_by_sql(), da ich Unterabfragen benötigen. Dies funktioniert, wenn ich entweder die erste oder zweite Abfrage, aber wenn ich sie zusammen mit dem AND hinzufügen, beginnt es sich über mehr als 1 Zeile in der Unterabfrage zu beschweren.Mysql :: Fehler: Unterabfrage gibt mehr als 1 Zeile zurück:

Ich möchte alle Zeilen (Datensätze) zurückgegeben, die die Kriterien entsprechen. Was muss hier behoben/geändert werden? Was sagt mysql Ich möchte nur 1 Zeile?

Hier ist die resultierende SQL als in den Schienen gesehen 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) 

Antwort

4

Diese Zeile:

AND (select 0 from status_changes sc 

Sollte es nicht

AND exists (select 0 from status_changes sc 
+2

Sie da Mann! - Danke – Streamline

-3

Unterabfragen, die mehr als das Rück Eine Zeile wird von keinem SQL-Server unterstützt, soweit mir bekannt ist.

+0

Das ist Unsinn. – Tomalak

+0

ID auswählen, Name von Benutzer mit ID in (ID auswählen von active_user)? – Petruza

Verwandte Themen