【问题标题】:"NOT IN" sql command in dplyr using result from a different querydplyr中的“NOT IN”sql命令使用来自不同查询的结果
【发布时间】:2019-05-31 08:53:56
【问题描述】:

我一直在使用 dplyr 和 dbplyr 为我的 sql 服务器生成查询并提取数据,但我找不到执行 NOT IN sql 命令的方法。

我正在尝试生成这样的东西

SELECT * FROM EMPLOYEE WHERE ID NOT IN id_list

其中 id_list 是从 dplyr 中的另一个查询获得的

id_list <- mutate(uid = distinct(id)) %>% select(uid) %>% collect()

id_list 是一个 tbl_Microsoft SQL Server 对象。

生成 SQL 查询的 dplyr 代码是什么?

【问题讨论】:

  • 否定%in% ? EMPLOYEE[!EMPLOYEE$ID %in% id_list]dplyr, EMPLOYEE %&gt;% filter(!ID %in% id_list)
  • 谢谢。否定%in% 不起作用。但我认为过滤器功能可以完成这项工作。编辑:!ID 抛出了一个 sql 错误
  • as.data.frame(id_list)$uid 成功了
  • 请查看我发布的答案,该答案解决了如何使用 dbplyr 否定此查询。 Ronak Shah 的答案是正确的,只需要在否定之前将比较放在括号中。

标签: sql r dplyr dbplyr


【解决方案1】:

Ronak Shah 的代码是正确的想法,但不能正确否定。现在它只是否定 ID 而不是否定比较的结果。

EMPLOYEE %>% 
filter(!(ID %in% id_list)) %>%
collect()

如果您将比较放在括号中,然后否定比较结果,您的查询将很好地工作(我在我拥有的数据库连接上对其进行了测试)。

【讨论】:

  • 谢谢。我遇到的主要问题是id_list 是一个小标题,我必须将它转换为一个向量,正如我在评论中提到的那样。然后我用你上面的 sn-p 向量。
猜你喜欢
  • 2011-09-03
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2013-11-18
  • 2015-02-23
  • 1970-01-01
相关资源
最近更新 更多