【问题标题】:How can I delete records from an ODBC database based on a dataframe in R如何根据 R 中的数据框从 ODBC 数据库中删除记录
【发布时间】:2014-10-15 02:55:58
【问题描述】:

我在 R 中有一个包含记录列表的数据框。我想从我的 ODBC 数据源中删除所有匹配的记录。

    data_to_delete ##This is my dataframe

    delete from RODBC datasource where record_id IN (select record_id 
                                                    from data_to_delete)

关于如何实现这一目标的任何想法?我目前正在使用 sqlQuery 来拉取数据并使用 sqlSave 来创建新记录,但我不确定如何删除记录。

【问题讨论】:

    标签: sql r delete-row rodbc


    【解决方案1】:

    正如answers to this related question 解释的那样,您需要以编程方式构建包含DELETE 语句的字符串,然后您可以像执行sqlQuery 中的任何其他语句一样执行DELETE 语句。

    所以在DELETE 的末尾,不要尝试从 R 变量中“选择”,而只是将其内容转储到逗号分隔的字符串中。下面,我假设无论data_to_delete 是什么,我们都可以使用pasteas.character 将其转换为逗号分隔的字符串。但您可以根据需要进行修改。

    我还假设您的意思是datasource 引用数据库,我使用some_table_name 作为该数据库中表名的占位符。您应该根据具体情况调整值。

    del_query <- sprintf("DELETE from some_table_name
                          where record_id IN (%s)",
                         paste(as.character(data_to_delete), 
                               collapse=", ")
                 )
    
    sqlQuery(datasource, del_query)
    

    使用这种方法,如果你的数据内容很大,你需要小心。 IN 子句中可以出现的不同符号的数量通常有一个符号限制,例如 SQL Server 中默认的 2000 个符号。

    如果您需要更多的值,您可以首先发出一个查询,将这些值写入到数据库上的一个临时表中,然后发出一个带有 sqlQuery 的查询,其中包含额外的IN ( SELECT * FROM ... ) 但您将从该临时表中查询,而不是“从”R 变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 2023-03-25
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多