【发布时间】:2019-08-03 10:20:37
【问题描述】:
我试图在 SQL 查询的 WHERE 子句中使用表中的值列表。具体来说,如果 pat_ids 是我的列表,例如pat_list= c('abc','xyz','123'),我尝试运行(在 R 中)
library('RODBC')
edw = odbcConnect('Teradata')
allVisit = sqlQuery(
edw,
"SELECT
fe.*
FROM edwcdm_pc_views.fact_encounter AS fe
JOIN edwcdm_pc_views.fact_diagnosis AS fd on fe.encounter_sk = fd.encounter_sk
WHERE
fe.Patient_Sk in paste("(",paste(pat_ids,collapse=","),")",sep="")
")
我收到错误“WHERE fe.Patient_Sk 中出现意外的字符串常量
我到底做错了什么?我没有将列表正确地重新格式化为 SQL WHERE 子句的字符串,还是尝试将 R 对象用作 SQL 查询术语的语法存在更根本的问题?
【问题讨论】:
-
它是
paste("SELECT ... (",paste(...),")")。您将查询的第一部分粘贴到第二部分。 -
我想我不明白。您的建议(在 SELECT 之前粘贴)只会将整个查询转换为 R 字符串。
-
没错。从 R 传递给 sqlQuery 的 SQL 是一个字符串。
-
另外,Teradata 或 SQL 通常没有
paste命令,这是一种 R 方法。发送到 Teradata 数据库引擎的所有内容都必须符合 Teradata 的 SQL 方言。请记住,有两种语言在这里工作:R 作为应用程序层,SQL 作为较低级别的数据库层。