我需要在某些PostgreSQL
数据库表中的其他列上条件更新列值。我设法在 R 中编写了一条 SQL 语句并使用dbExecute
from DBI
package 执行它。
library(dplyr)
library(DBI)
# Establish connection with database
con <- dbConnect(RPostgreSQL::PostgreSQL(), dbname = "myDb",
host="localhost", port= 5432, user="me",password = myPwd)
# Write SQL update statement
request <- paste("UPDATE table_to_update",
"SET var_to_change = 'new value' ",
"WHERE filter_var = 'filter' ")
# Back-end execution
con %>% dbExecute(request)
dplyr
是否可以仅使用语法来做到这一点?出于好奇,我尝试过,
con %>% tbl("table_to_update") %>%
mutate(var_to_change = if (filter_var == 'filter') 'new value' else var_to_change)
它在 R 中有效,但显然在 db 中没有任何作用,因为它使用了一个select
语句。copy_to
只允许append
和overwite
选项,所以我看不到如何使用它,除非删除然后附加过滤后的观察结果......