【问题标题】:SQL update query translation to sqldf in RSQL 更新查询翻译到 R 中的 sqldf
【发布时间】:2016-10-08 09:12:00
【问题描述】:

我有一个在常规 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”的 Producttype,在另一个表中选择“SAVING ACCOUNTS”的 Producttype。然后我想将“储蓄账户”更新为“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中做的不一样,但是我在网上找不到太多关于它的。

谢谢,

【问题讨论】:

  • 您可以发布您尝试使用的数据吗?如果您使用sqldf 对存储在 R 中的数据执行 SQL 查询,我建议您开始学习data.table。主要原因是sqldf 在执行查询之前会将您的数据转换为您配置的任何后端。 data.table 针对 R 进行了更多优化。
  • 1.您收到的错误信息是什么? 2. 你能提供一个可重现的例子吗?
  • 我得到的错误是.... sqliteSendQuery(con, statement,bind.data) 中的错误:语句中的错误:“INNER”附近:语法错误。我将尝试制作一个可重现的示例。

标签: sql r sqldf


【解决方案1】:

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

但是您可以通过这种方式更新您的表格:

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'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2023-01-10
    • 2019-05-09
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多