首页 > 解决方案 > 选定列的参数化查询

问题描述

我想在 sql 查询中选择列上的参数:
select ? from my_table

我用glue_sql试过了:
glue::glue_sql(con, "select {x} from my_table", x=noquotes("mycolumn"))

但结果是:

从 my_table 中选择“mycolumn”

代替:

从 my_table 中选择 mycolumn

有任何想法吗?

标签: r

解决方案


您正在尝试引用标识符或正确引用它(使用双引号)。帮助指出:

如果胶水表达式被反引号包围,它们会自动引用字符结果,引用标识符

尝试:

glue::glue_sql(.con=con, "select {`x`} from my_table", x="mycolumn")
# <SQL> select "mycolumn" from my_table

如果其他读者想知道为什么单引号不好,单引号将其创建为字符串文字,这意味着它将作为数据返回,而不是作为列标题。例如,使用一些带有Id字段的表:

DBI::dbGetQuery(con, "select 'Id' from sometable limit 3")
#     
# 1 Id
# 2 Id
# 3 Id

(注意没有列标题,正确的查询可能已将字符串文字命名为select 'Id' as somecolumnname ...,但此时很清楚为什么单引号不正确。)

DBI::dbGetQuery(con, 'select "Id" from sometable limit 3')
#                                     Id
# 1 03E33A23-3F2C-1234-5678-90ABCDEF1234
# 2 04E33A23-3F2C-1234-5678-90ABCDEF1234
# 3 8114F80C-624D-1234-5678-90ABCDEF1234

推荐阅读