在 R 中的 MonetDBLite 中使用 WHERE 子句的问题

Posted

技术标签:

【中文标题】在 R 中的 MonetDBLite 中使用 WHERE 子句的问题【英文标题】:Problem using WHERE clause in MonetDBLite in R 【发布时间】:2018-12-04 06:41:18 【问题描述】:

我正在尝试在 R64bit 3.5.1 中使用 MonetDBLite。 我的问题是我不能像这个例子一样使用 SQL 命令过滤数据:

dbGetQuery(DB,'select * from table1 where "var1" = "1"')

我收到此错误:

Error in .local(conn, statement, ...) : 
  Unable to execute statement 'select * from table1  where "var1" = "1"'.
Server says 'ParseException:SQLparser:42000!SELECT: identifier '1' unknown'.

有什么想法吗?

【问题讨论】:

【参考方案1】:

对于常量值,您需要对数值使用单引号 (') 或不使用。所以在你的例子中,

dbGetQuery(DB,'select * from table1 where "var1" = 1')

dbGetQuery(DB,'select * from table1 where "var1" = \'1\'')

dbGetQuery(DB,"select * from table1 where \"var1\" = '1'")

应该都可以。

一般规则是标识符(table1var1)一般只需要用"引用,如果它们包含空格或大写字符和常量(1)只需要用@987654329引用@ 如果它们是字符串。

【讨论】:

感谢您的回复。 \' 工作。在 where 子句中使用搜索参数怎么样:dbGetQuery(DB, 'SELECT * FROM table1 WHERE "var1" = \':x\'' , param = list(x = c('1','2','3')))。这不会返回任何东西。

以上是关于在 R 中的 MonetDBLite 中使用 WHERE 子句的问题的主要内容,如果未能解决你的问题,请参考以下文章

SQL 将许多 tsv 文件连接到数据库中的单个表中,同时跟踪文件源 (MonetDBLite)

使用 tbl 和 src_monetdblite 访问数据

在 MonetDBLite 中使用“INSERT INTO test VALUES”加载巨大的表

直接使用 dplyr 改变数据库表中的变量

从 MonetdbLite C API 使用 monetdb_append

使用 MonetDBLite C API 连接到现有的数据库场