mysql语法错误,查询直接工作

mysql语法错误,查询直接工作,mysql,Mysql,我正在尝试在rails中使用以下命令执行查询: ActiveRecord::Base.connection.execute(query.join) 我将查询构建为字符串,如下所示: UPDATE balance_lines SET parent_id = 2728740 WHERE id = 2728797; UPDATE balance_lines SET parent_id = 2728725 WHERE id = 2728767; UPDATE balance_lines SET p

我正在尝试在rails中使用以下命令执行查询:

ActiveRecord::Base.connection.execute(query.join)
我将查询构建为字符串,如下所示:

UPDATE balance_lines SET parent_id = 2728740 WHERE id = 2728797;
 UPDATE balance_lines SET parent_id = 2728725 WHERE id = 2728767;
 UPDATE balance_lines SET parent_id = 2728735 WHERE id = 2728783;
 UPDATE balance_lines SET parent_id = 2728727 WHERE id = 2728770;
 UPDATE balance_lines SET parent_id = 2728751 WHERE id = 2728838;
从rails执行查询时,我得到一个错误:

ActiveRecord::StatementInvalid(Mysql::Error:中存在错误 您的SQL语法;检查与您的MySQL对应的手册 在“更新平衡”行附近使用正确语法的服务器版本 设置parent_id=2728725,其中id=2728767


但是当我从mysql UI执行它时,它工作了!有什么问题吗?

请尝试使用CASE Station:

  UPDATE balance_lines SET parent_id = 
         CASE WHEN id = 2728797  THEN 2728740
              WHEN id = 2728767  THEN 2728725
              WHEN id = 2728783  THEN 2728735
              WHEN id = 2728770  THEN 2728727
              WHEN id = 2728838  THEN 2728751

         END
  WHERE id  in (2728797,2728767,2728783,2728770,2728838)

用CASE Station试试:

  UPDATE balance_lines SET parent_id = 
         CASE WHEN id = 2728797  THEN 2728740
              WHEN id = 2728767  THEN 2728725
              WHEN id = 2728783  THEN 2728735
              WHEN id = 2728770  THEN 2728727
              WHEN id = 2728838  THEN 2728751

         END
  WHERE id  in (2728797,2728767,2728783,2728770,2728838)

用CASE Station试试:

  UPDATE balance_lines SET parent_id = 
         CASE WHEN id = 2728797  THEN 2728740
              WHEN id = 2728767  THEN 2728725
              WHEN id = 2728783  THEN 2728735
              WHEN id = 2728770  THEN 2728727
              WHEN id = 2728838  THEN 2728751

         END
  WHERE id  in (2728797,2728767,2728783,2728770,2728838)

用CASE Station试试:

  UPDATE balance_lines SET parent_id = 
         CASE WHEN id = 2728797  THEN 2728740
              WHEN id = 2728767  THEN 2728725
              WHEN id = 2728783  THEN 2728735
              WHEN id = 2728770  THEN 2728727
              WHEN id = 2728838  THEN 2728751

         END
  WHERE id  in (2728797,2728767,2728783,2728770,2728838)


您试图一次运行多个查询。您可能无法做到这一点。您需要一次运行一个查询。我不知道问题出在哪里,但您可能可以循环查询并执行每个查询。@johncode-但我想节省时间并对所有查询执行一个查询。如何实现这一点?这只是字符串的开头。它有50个-像这样的100行!这可以工作
query.each{| q | ActiveRecord::Base.connection.execute(q)}
,可能包装在数据库中Transaction@MrYoshiji-但如果我只想往返服务器一次,以加快应用程序的运行速度,该怎么办?您正在尝试一次运行多个查询。您可能无法做到这一点。您需要一次运行一个查询。我不知道问题出在哪里,但您可能可以循环查询并执行each one。@johncode-但我想节省时间并对所有人进行一次查询。我如何才能做到这一点?这只是字符串的开头。它有50-100行这样的行!这可以工作
query.each{q | ActiveRecord::Base.connection.execute(q)}
,可能包装在数据库中Transaction@MrYoshiji-但如果我只想往返服务器一次,以加快应用程序的运行速度,该怎么办?您正在尝试一次运行多个查询。您可能无法做到这一点。您需要一次运行一个查询。我不知道问题出在哪里,但您可能可以循环查询并执行each one。@johncode-但我想节省时间并对所有人进行一次查询。我如何才能做到这一点?这只是字符串的开头。它有50-100行这样的行!这可以工作
query.each{q | ActiveRecord::Base.connection.execute(q)}
,可能包装在数据库中Transaction@MrYoshiji-但如果我只想往返服务器一次,以加快应用程序的运行速度,该怎么办?您正在尝试一次运行多个查询。您可能无法做到这一点。您需要一次运行一个查询。我不知道问题出在哪里,但您可能可以循环查询并执行each one。@johncode-但我想节省时间并对所有人进行一次查询。我如何才能做到这一点?这只是字符串的开头。它有50-100行这样的行!这可以工作
query.each{q | ActiveRecord::Base.connection.execute(q)}
,可能包装在数据库中Transaction@MrYoshiji-但如果我只想往返服务器一次,以加快应用程序的速度,该怎么办?