我有一个适用于常规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中可能有不同的做法,但我无法在网上找到它。
谢谢,
答案 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'))