2009-03-12 7 views
0

В моем приложении rails я запускаю sql-запрос, используя find_by_sql(), так как мне нужны подзапросы. Это работает, если я выполняю первый или второй запрос, но когда я добавляю их вместе с И, он начинает жаловаться на более чем 1 строку в подзапросе.Mysql :: Ошибка: Подзапрос возвращает более 1 строки:

Я хочу вернуть все строки (записи), соответствующие критериям. Что нужно исправлять/изменять здесь? Что говорит mysql Я хочу только 1 строку?

Вот результирующий SQL, как показано на рельсах входа:

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) 

ответ

4

Эта линия:

AND (select 0 from status_changes sc 

Не должно быть

AND exists (select 0 from status_changes sc 
+2

you da man! - спасибо – Streamline

-3

подзапросов, возвращающих более Насколько мне известно, 1 строка не поддерживается никаким SQL-сервером.

+0

Это вздор. – Tomalak

+0

Выберите id, имя пользователя, где id (Выбрать id из active_user)? – Petruza

Смежные вопросы