SQL更新查询转换为R

时间:2016-10-06 14:47:59

标签: sql r sqldf

我有一个适用于常规SQL的更新查询,我无法在R中的sqldf中使用它。

以下是常规SQL

中的查询
UPDATE Merged INNER JOIN Merged AS Merged_1 ON Merged.AccountID = Merged_1.AccountID 
SET Merged.Producttype = "FIDUCIARY 48 HRS"
WHERE (((Merged.Producttype)="SAVING ACCOUNTS") AND ((Merged_1.Producttype)="FIDUCIARY 48 HRS"));

我通过AccountID加入同一个表格,并根据条件仅显示AccountID匹配的位置。我选择的产品类型为" FIDUCIARY 48 HRS"在一个表格中,在另一个表格中,一个产品类型为" SAVING ACCOUNTS"。然后我想更新" SAVING ACCOUNTS"说" FIDUCIARY 48 HRS"。

这是让我最有意义的工作,但事实并非如此。我已经尝试过其他变体来声明字符串。

Merged = dataSegment
Merged_1 = dataSegment

sqldf("UPDATE Merged INNER JOIN Merged AS Merged_1 ON Merged.AccountID = Merged_1.AccountID 
SET Merged.Producttype = "'"FIDUCIARY 48 HRS"'"
WHERE (((Merged.Producttype)="'"SAVING ACCOUNTS"'") AND ((Merged_1.Producttype)="'"FIDUCIARY 48 HRS"'"))")

当然,这种查询在sqldf中可能有不同的做法,但我无法在网上找到它。

谢谢,

1 个答案:

答案 0 :(得分:2)

您的查询不适用于sqldf,因为JOIN子句中并非所有DBMS都支持UPDATE

但是你可以这样更新你的桌子:

sqldf(c("UPDATE Merged
         SET Producttype = 'FIDUCIARY 48 HRS'
         WHERE Producttype = 'SAVING ACCOUNTS' 
               AND AccountID IN (SELECT AccountID
                                 FROM Merged
                                 WHERE Producttype = 'FIDUCIARY 48 HRS')",
        "SELECT * FROM Merged"))

SELECT * FROM Merged是必要的:请参阅sqldf FAQ #8

请注意,您也可以使用dplyr

library(dplyr)

Merged <- Merged %>%
  group_by(AccountID) %>%
  mutate(Producttype = replace(Producttype, 
                               Producttype == 'SAVING ACCOUNTS' &
                               'FIDUCIARY 48 HRS' %in% Producttype, 
                               'FIDUCIARY 48 HRS'))