【问题标题】:Mysql2 syntax error creating VIEWMysql2语法错误创建VIEW
【发布时间】:2016-08-23 04:48:20
【问题描述】:

我刚刚在 Windows 10 上设置了 Bash,安装了 libmysqlclient-dev 包并正在运行一个 rake 任务,该任务执行以下查询以使用 ActiveRecord::Base.connection.execute 在 mysql 数据库上创建一个视图

DROP TABLE IF EXISTS debtors_customer_balances;
CREATE OR REPLACE VIEW debtors_customer_balances AS
  SELECT
    customer_id,
    SUM(amount_cents) AS total_cents,
    SUM(CASE
          WHEN due_on >= CURDATE()
          THEN amount_cents
          ELSE 0
          END) AS current_cents,
    SUM(CASE
          WHEN due_on >= (CURDATE() - INTERVAL 7 DAY)
          AND  due_on < CURDATE()
          THEN amount_cents
          ELSE 0
          END) AS overdue7_cents,
    SUM(CASE
          WHEN due_on >= (CURDATE() - INTERVAL 14 DAY)
          AND  due_on < (CURDATE() - INTERVAL 7 DAY)
          THEN amount_cents
          ELSE 0
          END) AS overdue14_cents,
    SUM(CASE
          WHEN due_on >= (CURDATE() - INTERVAL 30 DAY)
          AND  due_on < (CURDATE() - INTERVAL 14 DAY)
          THEN amount_cents
          ELSE 0
          END) AS overdue30_cents,
    SUM(CASE
          WHEN due_on < (CURDATE() - INTERVAL 30 DAY)
          THEN amount_cents
          ELSE 0
          END) AS overdue30_plus_cents
  FROM
    debtors_balances
  GROUP BY
    customer_id;

但是,它正在抛出一个错误

Mysql2::Error: 你的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本以获得正确的语法 在“创建或替换视图债务人_客户_余额作为选择”附近使用 ' 在第 2 行:删除表如果存在债务人_客户_余额;创建或 替换视图债务人_客户_余额作为选择 customer_id 等...

我无法弄清楚是什么导致了这个问题,因为查询在 mac 上运行良好,它只是在 bash 中用于 windows 我似乎得到了这个语法错误。

我使用的 gem 是 mysql2 (0.3.18)

【问题讨论】:

    标签: mysql ruby-on-rails bash mysql2 windows-subsystem-for-linux


    【解决方案1】:

    这是由第一行 DROP TABLE IF EXISTS debtors_customer_balances; 引起的,实际上应该是 DROP VIEW ...。删除第一行,它应该可以工作。无论如何,您使用的是CREATE OR REPLACE VIEW debtors_customer_balances,那么在前面添加DROP 语句是什么意思?

    【讨论】:

    • 修复了查询以便它可以运行,但不幸的是,存在 DROP TABLE 行的原因是因为在 db:seed 的末尾调用了此查询,并且由于某种原因视图是作为 TABLES 添加到架构中,因此当 db:schema:load 作为重新种子 (db:reset) 的一部分运行时,它会将这些视图创建为表,并在到达此查询时出错。
    • 修复了使用ActiveRecord::SchemaDumper.ignore_tables = ['debtors_customer_balances', 'debtors_customer_entity_balances']将视图作为表添加到架构中的问题
    猜你喜欢
    • 1970-01-01
    • 2013-11-06
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2014-03-21
    • 2016-02-07
    • 1970-01-01
    相关资源
    最近更新 更多