代码之家  ›  专栏  ›  技术社区  ›  Michael Mulligan

创建VIEW时Mysql2语法错误

  •  0
  • Michael Mulligan  · 技术社区  · 8 年前

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

    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::错误:您的SQL语法有错误;检查手册 对应于MySQL服务器版本的正确语法 在“CREATE OR REPLACE VIEW debtors_customer_balances AS SELECT”附近使用 '第2行:如果存在debtors_customer_balances,则删除表;创建或 将视图debtors_customer_balances替换为SELECT 客户id等。。。

    我不知道是什么原因导致了这个问题,因为查询在mac上运行得很好,只是在bash for windows中,我似乎得到了这个语法错误。

    我使用的gem是mysql2(0.3.18)

    1 回复  |  直到 8 年前
        1
  •  0
  •   Rahul    8 年前

    这是由第一条线引起的 DROP TABLE IF EXISTS debtors_customer_balances; 实际上应该是 DROP VIEW ... 相反删除第一行,它就会工作。无论如何,您正在使用 CREATE OR REPLACE VIEW debtors_customer_balances 那么加上这个又有什么意义呢 DROP 之前的声明?