0

私の Rails アプリでは、サブクエリが必要なため、find_by_sql() を使用して SQL クエリを実行しています。これは、最初または2番目のクエリを実行すると機能しますが、それらをANDで追加すると、サブクエリで複数の行について不平を言い始めます。

条件に一致するすべての行 (レコード) が返されるようにします。ここで何を修正/変更する必要がありますか? 1行だけが欲しいとmysqlに伝えているのは何ですか?

rails ログに表示される結果の 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

2 に答える 2

4

この行:

AND (select 0 from status_changes sc

そうじゃないかな

AND exists (select 0 from status_changes sc
于 2009-03-12T07:04:39.433 に答える
-3

私の知る限り、複数の行を返すサブクエリはどの SQL サーバーでもサポートされていません。

于 2009-03-12T07:05:22.333 に答える