我有两个表帐户和详细信息。
帐户有很多细节。
其中一个细节是公司规模。它们的排名是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
问题是sql语句删除大小为6的公司我正在考虑这样的事情
ActiveRecord::Base.connection.execute("DELETE accounts INNER JOIN details ON accounts.id=details.account.id WHERE details.size = 6")
但这对我来说很有趣。我是sql语句的新手,所以任何帮助表示赞赏。
答案 0 :(得分:3)
您可以使用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
答案 1 :(得分:2)
像
这样的东西DELETE accounts
from details INNER JOIN accounts ON accounts.id = details.account_id
WHERE details.size = 6
但是,请记住,这会在您的详细信息表格中留下孤立的记录
答案 2 :(得分: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
)