2012-01-13 13 views
2

処理された行の量を返すように、Railsで次のクエリを再作成するにはどうすればよいですか?Mysql to Rails SQLクエリ

self.connection.execute('DELETE FROM `cd_artist` 
LEFT JOIN `cdpedia` ON cd_artist.id = cdpedia.`artistId` 
WHERE artistId IS NULL;') 

私はそれが何かを返すようにするために、私はArtist.find_by_sqlのようなものを使用する必要があり実現が、それは私にエラーを与えます。

おそらく、これを行うよりエレガントな方法がありますか?

データベースを最初に検索してからIDを取得してObject.destroy、さらにはObject.delete(id)というエントリを削除しないようにしたいのですが、SQL呼び出しが非常に高速です(正しいインデックスがある場合)それを行うための「正しい」方法は何か不思議です。

+0

あなたの質問は間違っているようです。既にデータベースで直接テストしましたか? – basgys

答えて

3

を実行すると、影響を受ける行の数が返されます。

self.connection.delete('DELETE FROM `cd_artist` 
LEFT JOIN `cdpedia` ON cd_artist.id = cdpedia.`artistId` 
WHERE artistId IS NULL;') 

はおそらくのActiveRecordでこれを行うために、よりエレガントな方法がありますが、私はそれは、生のSQLクエリほど効率的ではないだろう。

+0

ありがとうございます。だからちょうど削除を使用し、また、クエリ内のDELETEを含める?私は 'connection.delete'が(実際のクエリに関係なく)影響を受ける行の数を返し、実行しないと推測しています。 – kakubei

+0

@kakubeiはい、クエリは解析されないため、キーワードDELETEを含める必要があります。したがって、UPDATE文を置くと、delete()は(あなたの言ったように)何の違いも見ません。しかし、select()は結果を返し、insert/update/deleteはnilを返します。 – basgys

+0

ありがとう、それは本当に知って良いです。 – kakubei