我有一个包含多个列的 DF,但有一列是某些预处理阶段的结果,该列包含我需要使用 MySQL 查询进行搜索的值。
如何让查询直接读取包含此信息的列或另一个 DF,而不是手动添加它们?
DF 示例:
id
3061945
7392492
7491277
7855936
8125589
7060737
5614627
7597607
查询:
select c.Id as sfdcContactID,
c.FirstName,
c.ID__c as uid
from Contact as c
where c.ID__c in ('values to be looked based on the DF’);
最佳答案
由于数据帧中可能有数千甚至数百万个值,请考虑将数据帧导出到 MySQL 临时表,然后将其加入您的查询中。以下是使用数据库 API 或命令行最终创建查询结果数据框的几种方法。
RODBC
# REPLACES TEMP WITH EVERY CALL
sqlSave(conn, "temptablename", df, append = FALSE)
# RUNS QUERY AND IMPORTS RESULTS INTO DATAFRAME
newdf <- sqlQuery(conn, paste0("SELECT c.Id as sfdcContactID, c.FirstName, c.ID__c as uid",
" FROM Contact c",
" INNER JOIN temptablename t ON c.ID__c = t.id"))
RMySQL
# REPLACES TEMP WITH EVERY CALL
dbWriteTable(conn, "temptablename", df, overwrite = TRUE)
# RUNS QUERY AND IMPORTS RESULTS INTO DATAFRAME
newdf <- dbGetQuery(conn, paste0("SELECT c.Id as sfdcContactID, c.FirstName, c.ID__c as uid",
" FROM Contact c",
" INNER JOIN temptablename t ON c.ID__c = t.id"))
命令行
R - CSV 导出
write.csv("path/to/file.csv", df)
SQL (另存为 .sql 文件)
# IMPORT CSV FILE TO TABLE
LOAD DATA LOCAL INFILE '/path/to/file.csv'
INTO TABLE temptablename
FIELDS TERMINATED BY
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
# EXPORT QUERY TO CSV FILE
SELECT c.Id as sfdcContactID, c.FirstName, c.ID__c as uid
FROM Contact c
INNER JOIN temptablename t ON c.ID__c = t.id
INTO OUTFILE '/path/to/output.csv'
FIELDS ENCLOSED BY '"'
TERMINATED BY ','
LINES TERMINATED BY '\r\n';
R - CMD/Shell 调用 mysql 客户端
system("mysql -u username -p password db_name < /path/to/file.sql")
df <- read.csv("/path/to/output.csv")
关于mysql - 在 R 中运行 MySQL 查询,其中要搜索的值在 DF 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41813582/