Sql 使用dbplyr检查记录是否存在

Sql 使用dbplyr检查记录是否存在,sql,r,dplyr,dbplyr,Sql,R,Dplyr,Dbplyr,为了检查SQL表(比如“Products”)中是否存在记录,中投票最多的答案建议使用 IF EXISTS (SELECT * FROM Products WHERE id = '?') ... 给定与SQL数据库的连接con,是否有方法在表dplyr::tbl(con)上执行这样的操作?当然可以使用%%>%dplyr::filter(id%in%!!x)仅选择相关行,并将结果与记录进行比较(此处为x)。不过,这似乎效率低下。您引用的行(如果存在…行)是事务性sql语句的一部分,而不是从表中获

为了检查SQL表(比如“Products”)中是否存在记录,中投票最多的答案建议使用

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

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

您引用的
行(如果存在…
行)是事务性sql语句的一部分,而不是从表中获取数据的纯查询。我没有找到任何方法让
dbplyr
翻译事务性sql语句,而只是查询。一般来说,如果使用
dbplyr
我将使用R作为控制语句,而不是事务性sql

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

id\u查找%
总目(1)
#验证查询
显示\u查询(获取的\u id)
#将结果提取到R中
获取的\u id%
收集
如果id存在,则返回1x1数据帧;如果id不存在,则返回0x1数据帧。如果(nrow(fetched_id)==1){…,则可以使用
进行检查

或者,您可能希望查看DBI包中的
dbExecute
。这允许您将文本字符串从R传递到SQL。因此,您可以在R中创建事务SQL语句,并将其传递到数据库,而不使用dbplyr

最后一点需要注意的是,对于sql server,dbplyr确实有一个到
EXISTS
的转换。如果您使用半联接,则会发生这种情况。因此,如果您的应用程序可以使用半联接编写,则可以通过这种方式解决问题