0

我有两个表帐户和详细信息。

一个账户有很多细节。

细节之一是公司规模。他们的排名是1-7。我想删除大小为 6 的所有帐户,然后我想更新帐户,以便将所有大小为 7 的帐户更改为大小 6。所以基本上我从系统中删除大小为 6 的公司。我正在考虑在迁移中这样做。

class RemoveEmeAccounts < ActiveRecord::Migration
  def change
  ActiveRecord::Base.connection.execute("*****")
  ActiveRecord::Base.connection.execute("Update details set size = 6 where size = 7")
  end
end

问题是删除大小为 6 的公司的 sql 语句我在想这样的事情

ActiveRecord::Base.connection.execute("DELETE accounts INNER JOIN details ON accounts.id=details.account.id WHERE details.size = 6")

但这对我来说很有趣。我对 sql 语句真的很陌生,因此感谢您的帮助。

4

3 回答 3

2

就像是

DELETE accounts 
from details INNER JOIN accounts ON accounts.id = details.account_id
WHERE details.size = 6

但是,请记住,这会在您的详细信息表中留下孤立的记录

于 2012-11-13T12:58:01.140 回答
2

您可以使用 ActiveRecord API 完成此任务。您应该始终尽量减少应用程序中纯 SQL 语句的数量(以实现跨数据库兼容性)。

ActiveRecord::Base.transaction do
  Account.joins(:details).where(:size => 6).delete_all
  Account.joins(:details).where(:size => 7).update_all(:size => 6)
end
于 2012-11-13T12:58:03.650 回答
1

好吧,这条 SQL 语句将起作用。在这里,我做了一个内部 SELECT 来获取你想要的所有 id,并在外部 DELETE 上使用它。

DELETE FROM accounts 
WHERE id IN 
(
  SELECT accounts.id FROM accounts 
  INNER JOIN details ON accounts.id = details.account_id 
  WHERE details.size = 6
)
于 2012-11-13T12:52:36.103 回答