2013-01-11 50 views
1

我願做一個UPDATE與SQLite的兩個表[R sqlite的:兩個表的更新提供了語法錯誤, 「近」「:

x1 <- data.frame(id = rep(1,3), 
        t = as.Date(c("2000-01-01","2000-01-15","2000-01-31")) 
) 
x1.h <- 0 
x2 <- data.frame(id = 1, start = as.Date("2000-01-14")) 

更新爲:

sqldf(paste("UPDATE x1" 
     ," SET x1.h = 1" 
     ," WHERE EXISTS (SELECT *" 
     ,"    FROM x2" 
     ,"    WHERE x1.id = x2.id" 
     ,"      AND x1.t < x2.start" 
     ,"    )" 
     ) 
) 

我得到以下錯誤:?

Error in sqliteExecStatement(con, statement, bind.data) : 
    RS-DBI driver: (error in statement: near ".": syntax error) 

有別人的想法有什麼不順心 感謝幫助

回答

0

我認爲你的內在SELECT沒有說它從哪裏選擇。單獨嘗試。我認爲它應該看起來更像:

SELECT * FROM x1,x2 WHERE x1.id = x2.id AND x1.t < x2.start 
2

爲什麼你用sqldf更新?我認爲sqldf是ONy select聲明。

我會用RSQLite這個。

首先我糾正你的sql statetemnt。我更喜歡使用九月 '\ n',要獲得相當的要求與貓

str.update <- paste(" UPDATE x1" 
      ," SET h = 1 "    ## here the error 
      ," WHERE EXISTS (SELECT * " 
      ,"    FROM x2 "    ## here second error 
      ,"    WHERE x1.id = x2.id " 
      ,"    AND x1.t < x2.start " 
      ,"  )" 
     ,sep ='\n' 
) 


cat(str.update) 
UPDATE x1 
SET h = 1 
WHERE EXISTS (SELECT * 
       FROM x1,x2 ## 
       WHERE x1.id = x2.id 
       AND x1.t < x2.start 
     ) 

然後,你可以這樣做:

library(RSQLite) 
con <- dbConnect(SQLite(), ":memory:") 
dbWriteTable(con, "x1", x1)   # I create my table x1 
dbWriteTable(con, "x2", x2)   # I create my table x2 
res <- dbSendQuery(con, str.update) 
dbReadTable(con,name='x1')   ## to see the result 

編輯

我歐普澄清後編輯我的答案( FROM x1,x2變成FROM x2

+1

提示:有時,查找SQL語法錯誤的最佳方法是學會閱讀語法圖:http://www.sqlite.org/syntaxdiagrams.html#update-stmt - UPDATE獲取列名後的SET而不是一個table.column名稱。 – Spacedman

+0

@Spacedman謝謝你的提示。但是,爲什麼你對我說,我的答案是否有任何問題?:) – agstudy

+0

不,它的意思是OP - 也許應該評論Q本身... – Spacedman

1

我發現這個解決方案:

x1$h <- 0 
x1 <- sqldf(c("UPDATE x1 
     SET h = 1 
     WHERE EXISTS (SELECT x1.id 
         FROM x2 
         WHERE x1.id = x2.id 
          AND x1.t < x2.start 
        )", 
     "SELECT * FROM main.x1")) 

,並提供:

> x1 

    id   t h 
1 1 2000-01-01 1 
2 1 2000-01-15 0 
3 1 2000-01-31 0 

來源: https://code.google.com/p/sqldf/#8._Why_am_I_having_problems_with_update? 其他要提醒的事情:顯然別名不起作用,例如UPDATE x1 a ... 感謝您的幫助。

相關問題