использование списка R в предложении WHERE SQL-запроса - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь использовать список значений из таблицы в предложении WHERE SQL-запроса. В частности, если 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?

1 Ответ

0 голосов
/ 12 марта 2019

Клеевая упаковка имеет удобную функцию glue_sql, которая решает эту проблему:

glue::glue_sql(
  "
  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 ({pat_list*})
  ",
  .con = edw
)
#<SQL> 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 ('abc', 'xyz', '123')
...