我已经使用dbConnect和RMySQL软件包通过R成功连接到我公司的数据库。但是,我正在努力在R中运行查询并获得令人沮丧的错误。该查询可在我每天使用的MySQL Workbench应用程序中运行,因此令人沮丧的是,它无法在R中运行。这是SQL查询的一个片段:

USE mydb;
SELECT @theDate := '2017-05-03';

SELECT
    @theDate AS today,
    a.user_id AS user_id,
    ...
    ...


这些是查询的前几行,也是查询中导致R错误的部分。我收到以下错误:

my_query = "    USE mydb;
SELECT @theDate := '2017-05-03';

SELECT
    @theDate AS today,
    a.user_id AS user_id,
    ...
    ... "

my_db = dbConnect(MySQL(), ...)
requested_query = dbSendQuery(my_db, my_query)

Error in .local(conn, statement, ...) :
  could not run statement: You have an error in your SQL syntax; check the manual that
  corresponds to your MySQL server version for the right syntax to use
  near 'SELECT
           @theDate AS today,
           a.user_id AS user_id,' at line 3


抱歉,我无法提供更多可重复的代码,但这将涉及连接到公司数据库,而我无法共享数据库信息。

最后评论-我相信这行与SELECT @theDate::='2017-05-03';线。该查询是由我的同事而不是我自己编写的,在查询之前我从未见过2条select语句像这样使用。 MySQL Workbench应用程序中发生的事情是@theDate本质上是一个设置为'2017-05-03'的变量。查询返回的表的第一列均为“ 2017-05-03”

就像我说的那样,该查询在MySQL Workbench中有效,但在R中却无法正常工作。任何建议表示赞赏!

谢谢!

编辑-意识到这是试图了解设置变量在SQL中的工作方式的一个问题。就像我说过的,我之前从未见过,但是第一个SELECT查询正在设置一个变量,然后第二个SELECT查询使用该变量。可以吗?我不知道为什么它允许在MYSQL Workbench中使用,但不允许R ...仍然令人沮丧

最佳答案

我相信您不能在单个dbSendQuery()调用中执行超过1个sql查询,这会导致错误消息。

分别执行两个查询,或者在第二个选择中将值分配给会话变量:

SELECT @theDate := '2017-05-03' AS today, ....

关于mysql - 在R中使用MySQL-尝试将变量返回为列时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43774677/

10-12 16:40
查看更多