微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查dbplyr是否存在记录

如何解决检查dbplyr是否存在记录

为了检查sql表中是否存在记录(例如“产品”),sql - Fastes way to determine if record exists中投票最高的答案建议使用

IF EXISTS (SELECT * FROM Products WHERE id = '?') 
...

给出与sql数据库的连接con,是否可以对表dplyr::tbl(con)执行此类操作?当然,可以使用%>% dplyr::filter(id %in% !!x)仅选择相关的行,并将结果与​​记录进行比较(此处为x)。不过,这似乎效率很低。

解决方法

您引用的IF EXISTS ...行是事务sql语句的一部分,而不是从表中获取数据的纯查询。我还没有找到让dbplyr转换事务性SQL语句的任何方法,只有查询。通常,如果使用dbplyr,我将R用于控制语句而不是事务性sql。

我所建议的与您链接的问题中接受的答案一致:

id_to_find <- 1234
remote_table <- dplyr::tbl(db_connection,from = tbl_name)

# create query
fetched_id <- remote_table %>%
  filter(id == id_to_find) %>%
  select(id) %>%
  head(1)

# validate query
show_query(fetched_id)

# fetch result into R
fetched_id <- fetched_id %>%
  collect()

如果id存在,则返回1x1数据帧,如果ID不存在,则返回0x1数据帧。然后可以使用if(nrow(fetched_id) == 1){...进行检查。

或者,您可能想看看DBI软件包中的dbExecute。这使您可以将文本字符串从R传递到SQL。因此,您可以在R中创建一个事务性sql语句,然后将其传递给不带dbplyr的数据库。

最后一点说明,dbplyr确实将sql服务器转换为EXISTS。如果您执行半联接,则会发生这种情况。因此,如果您的应用程序可以使用半联接编写,则可以通过这种方式解决问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。