2017-08-07 59 views
1

我有兩個表;即表1 = PID(主鍵)+ 20其他列&來自數據庫1的200條記錄AND 表2 = [序列號](主鍵)+10其他列&來自數據庫2的300條記錄。使用R子句中的R變量的Where子句在SQL語句中使用它

我想從table2中提取值,其中PID = [Serial no]。

注意:PID = [SCK34ICV7,NSCK876DL,......]。

我refered 「通過字符串變量中的R腳本中使用它的SQL語句」

t1 <- sqlquery(db1, "select * from table1") 
r1 <- t1$PID 
class(r1) = 'factor' 
t2 <- sqlquery(db2, "select * from table2 where [Serial no] = '(",r1,")' ",sep ="") 

我也嘗試過其他的功能即paste0(),FN $從gsubfn和sprintf()和獲取錯誤,如 - 'c不是公認的函數名稱'; '錯誤的語法'。

請建議最好的方法來做到這一點。

註冊,

Mrutyunjaya

回答

3

您所查詢的是關閉的。請參閱here瞭解適當的格式。

r1 <- c("PID1","PID2","PID3") 

錯誤

paste("select * from table2 where [Serial no] = '(",r1,")' ",sep ="") 

輸出:

[1] "select * from table2 where [Serial no] = '(PID1)' " "select * from table2 where [Serial no] = '(PID2)' " "select * from table2 where [Serial no] = '(PID3)' " 

正確

paste("select * from table2 where [Serial no] IN (",paste(r1,collapse=", "),") ",sep ="") 

輸出:

[1] "select * from table2 where [Serial no] IN (PID1, PID2, PID3) " 

所以查詢變爲:

t2 <- sqlquery(db2,paste0("select * from table2 where [Serial no] IN (",paste(r1,collapse=", "),") ",sep ="")) 

希望這有助於。

+0

@ Florian,正在出錯 - 42S22 207 [Microsoft] [用於SQL Server的ODBC驅動程序13] [SQL Server]無效的列名稱'PID1'。這是什麼意思。 – Mrutyunjaya

+0

您不應該將我的值用於r1,我爲我的示例創建了一些帶有'r1 < - c(「PID1」,「PID2」,「PID3」)行的虛擬數據。你應該使用你自己的聲明。 – Florian

+0

我用我自己的矢量'r1'。 r1 < - t1 $ PID – Mrutyunjaya