【问题标题】:What is the correct syntax of RODBC query in RR中RODBC查询的正确语法是什么
【发布时间】:2016-11-04 09:58:54
【问题描述】:

我正在尝试使用以下代码在 R 中使用 RODBC 查询 Access 数据库:

library(RODBC)
channel <- odbcConnectAccess("S:\\mypath\\PhysiPopDONOTTOUCH\\Physiology.mdb")

data <- sqlQuery( channel , paste ("select Endoscopy.*,
Histology.Diagnosis from Endoscopy JOIN PatientData ON
Endoscopy.HospNum_Id=PatientData.HospNum_Id  JOIN Histology ON
Histology.HospNum_Id=PatientData.HospNum_Id WHERE histology.VisitDate
= Endoscopy.VisitDate"))

。这不成功,因为我收到错误:

[1] "42000 -3506 [Microsoft][ODBC Microsoft Access Driver] Syntax
error in FROM clause."
[2] "[RODBC] ERROR: Could not SQLExecDirect 'select Endoscopy.*,
Histology.Diagnosis from Endoscopy JOIN PatientData ON
Endoscopy.HospNum_Id=PatientData.HospNum_Id  JOIN Histology ON
Histology.HospNum_Id=PatientData.HospNum_Id WHERE Histology.VisitDate
= Endoscopy.VisitDate'"

EndoscopyHistology 表与PatientData 表是一对多的。我在语法上做错了什么?

【问题讨论】:

  • 我认为您不需要粘贴,而且我发现添加“as.is = TRUE”有助于防止奇怪的格式转换。所以尝试: data
  • 我尝试删除粘贴并单独和一起添加 as.is=TRUE 但我得到了同样的错误。
  • 您是否尝试过在 Access 中运行 SQL 查询以检查它是否有效?例如,您的 SQL 查询似乎在末尾缺少分号 (;)。也许:数据
  • 啊哈。是的,我使用 Access 可视化设计器重新设计了查询,然后将 SQL 剪切并粘贴到 R 中。它可以在没有粘贴和 as.is 的情况下工作
  • 好你解决了!

标签: sql r ms-access


【解决方案1】:

MS Access SQL 要求 JOIN 配对用括号括起来。此外,paste() 的使用是为了消除在 R 中换行时出现的字符串值内的长空格。并考虑使用表别名来简洁地引用表。也包括一个分号终止符(参见:When should I use semicolons in SQL Server?)。见以下调整:

data <- sqlQuery(channel , 
                 paste("SELECT e.*, h.Diagnosis",
                       "(FROM PatientData p"
                       "INNER JOIN Endoscopy e p ON e.HospNum_Id = p.HospNum_Id)",
                       "INNER JOIN Histology h ON h.HospNum_Id = p.HospNum_Id",
                       "WHERE h.VisitDate = e.VisitDate;", sep=" "))     

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多