我已经使用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/