【问题标题】:ActiveRecord::StatementInvalid: Mysql2::Error: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOMEActiveRecord::StatementInvalid: Mysql2::Error: 这个版本的 MySQL 还不支持 'LIMIT & IN/ALL/ANY/SOME
【发布时间】:2014-07-18 01:20:02
【问题描述】:

我需要使用 rails 3 中的活动记录查询删除一些重复的行。是的,该表没有主键或其他约束。但不是我的罪。 :) 我不能只执行一些查询,例如从“TableWhatever”中删除,因为一行是正确的,不是两行,也不是三行。所以我尝试执行类似的操作:

Domain.delete(Domain.where(domain: 123).limit(1))

而mysql给出以下错误: ActiveRecord::StatementInvalid: Mysql2::Error: 这个版本的 MySQL 还不支持 'LIMIT & IN/ALL/ANY/SOME subquery': DELETE FROM domain WHERE domain.id_domain IN (SELECT @987654324 @.id_domain FROM domain WHERE domain.id_domain = 123 限制 1)

【问题讨论】:

  • 为什么这么复杂?为什么不删除没有子选择?我不知道 ruby​​,但它可能是这样的:Domain.delete.where(domain: 123).limit(1),在普通 SQL 中:DELETE FROM domain WHERE id_domain = 123 LIMIT 1
  • 在 Rails 中将是 Domain.delete.where(123).limit(1) ,但不像你想的那样工作。是的,在 sql 中很简单,但需要使用 rails 来做到这一点。

标签: mysql ruby-on-rails activerecord


【解决方案1】:

为什么你不能运行类似的代码

domains = Domain.where(:domain => 123)
domains.pop
domains.each do |domain|
    domain.destroy
end

【讨论】:

    【解决方案2】:

    全部)Domain.where(domain:123).destroy

    for first) Domain.where(domain:123).first.destroy

    不需要限制

    【讨论】:

    • Domain.where(domain:123).first.destroy,返回一个 sql 查询 DELETE FROM dominio WHERE dominio.id_dominio = 123,换句话说,所有带有 id_domain 的行: 123 被删除。我也试过了。
    猜你喜欢
    • 2022-07-22
    • 2017-11-14
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2015-03-07
    相关资源
    最近更新 更多