Mysql :: Error: подзапрос возвращает более 1 строки: - PullRequest
0 голосов
/ 12 марта 2009

В моем приложении rails я запускаю sql-запрос, используя find_by_sql (), так как мне нужны подзапросы. Это работает, если я делаю первый или второй запрос, но когда я добавляю их вместе с AND, он начинает жаловаться на более чем 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)

Ответы [ 2 ]

4 голосов
/ 12 марта 2009

Эта строка:

AND (select 0 from status_changes sc

Разве это не должно быть

AND exists (select 0 from status_changes sc
0 голосов
/ 12 марта 2009

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

...