Mysql R将SQL结果传递给SQL语句

Mysql R将SQL结果传递给SQL语句,mysql,sql,r,rmysql,Mysql,Sql,R,Rmysql,我正在从MySQL数据库中提取一些结果,如下所示: GetJobCodes=paste0("select EMPLID from jobCurrent where JOBCODE='",JOBCODE,"'") JOBCODES = dbGetQuery(connection,GetJobCodes) 我想把上面的作业代码结果传递给其他SQL语句 statement=sprintf("SELECT A.EMPLID, A.CLASS_ID FROM lmsEnroll A JOIN lmsC

我正在从MySQL数据库中提取一些结果,如下所示:

GetJobCodes=paste0("select EMPLID from jobCurrent where JOBCODE='",JOBCODE,"'")
JOBCODES = dbGetQuery(connection,GetJobCodes) 
我想把上面的作业代码结果传递给其他SQL语句

statement=sprintf("SELECT A.EMPLID, A.CLASS_ID FROM lmsEnroll A JOIN lmsCourses\ 
              B ON A.COURSE_ID=B.COURSE_ID AND B.REQUIRED=0 WHERE A.EMPLID IN (%s)",JOBCODES)
但当我传递到上面的语句时,它是打印出来的

从lmsEnroll A JOIN lmsCourses中选择A.EMPLID、A.CLASS\u ID
B在A.COURSE_ID=B.COURSE_ID和B.REQUIRED=0,其中A.EMPLID在“C”(“00330022”、“00033322”)中)
这是不正确的,我想打印如下:

从lmsEnroll A JOIN lmsCourses中选择A.EMPLID、A.CLASS\u ID
B在A.COURSE_ID=B.COURSE_ID和B.REQUIRED=0,其中A.EMPLID在“00330022”、“00033322”中

我使用了ShQuote函数,但它没有帮助。如果有人能帮助我,我将不胜感激

您可以使用
胶水
来执行此操作

library(glue)

GetJobCodes <- paste0("select EMPLID from jobCurrent where JOBCODE='",JOBCODE,"'")
JOBCODES <- dbGetQuery(connection,GetJobCodes)
statement <- "SELECT A.EMPLID, A.CLASS_ID FROM lmsEnroll A JOIN lmsCourses\ 
              B ON A.COURSE_ID=B.COURSE_ID AND B.REQUIRED=0 WHERE A.EMPLID IN ({JOBCODES})"
request <- glue_sql(statement,JOBCODES = JOBCODES, .con = connection)
库(胶水)

GetJobCodes您可以使用
胶水来执行此操作

library(glue)

GetJobCodes <- paste0("select EMPLID from jobCurrent where JOBCODE='",JOBCODE,"'")
JOBCODES <- dbGetQuery(connection,GetJobCodes)
statement <- "SELECT A.EMPLID, A.CLASS_ID FROM lmsEnroll A JOIN lmsCourses\ 
              B ON A.COURSE_ID=B.COURSE_ID AND B.REQUIRED=0 WHERE A.EMPLID IN ({JOBCODES})"
request <- glue_sql(statement,JOBCODES = JOBCODES, .con = connection)
库(胶水)

GetJobCodes考虑一个参数化查询(避免报价处理或连接),因为您可以在
IN
子句中使用
SELECT
语句:

sql <- "SELECT A.EMPLID, A.CLASS_ID 
        FROM lmsEnroll A 
        JOIN lmsCourses B ON A.COURSE_ID=B.COURSE_ID AND B.REQUIRED=0 
        WHERE A.EMPLID IN
           (SELECT EMPLID FROM jobCurrent WHERE JOBCODE = ?)"

emp_df <- dbGetQuery(connection, sql, list(JOBCODE)) 

考虑一个参数化查询(避免引号处理或连接),因为您可以在
IN
子句中使用
SELECT
语句:

sql <- "SELECT A.EMPLID, A.CLASS_ID 
        FROM lmsEnroll A 
        JOIN lmsCourses B ON A.COURSE_ID=B.COURSE_ID AND B.REQUIRED=0 
        WHERE A.EMPLID IN
           (SELECT EMPLID FROM jobCurrent WHERE JOBCODE = ?)"

emp_df <- dbGetQuery(connection, sql, list(JOBCODE)) 

明白了!这个问题是关于渲染的。通过选择带有JOBCODES的EMPLID,dataframe解决了问题

JOBCODES =paste(shQuote(JOBCODES$EMPLID,type="sh"),collapse=",") //Selecting EMPLID column

statement=paste0("SELECT A.EMPLID, A.CLASS_ID FROM lmsEnroll A JOIN lmsCourses B ON A.COURSE_ID=B.COURSE_ID AND B.REQUIRED=0 WHERE A.EMPLID IN 
(",JOBCODES,")")

明白了!这个问题是关于渲染的。通过选择带有JOBCODES的EMPLID,dataframe解决了问题

JOBCODES =paste(shQuote(JOBCODES$EMPLID,type="sh"),collapse=",") //Selecting EMPLID column

statement=paste0("SELECT A.EMPLID, A.CLASS_ID FROM lmsEnroll A JOIN lmsCourses B ON A.COURSE_ID=B.COURSE_ID AND B.REQUIRED=0 WHERE A.EMPLID IN 
(",JOBCODES,")")

此查询花费的时间太长,因此我尝试使用这种方法。您的数据库是否在lmsEnroll和jobCurrent表中的
EMPLID
上有索引?速度有多慢?涉及多少数据?MySQL中是否也出现了同样糟糕的性能?MySQL中的性能也很慢。再说一次,我们是在谈论数百万行吗?你对慢:5秒,5分钟,50分钟的解释吗?这个查询需要很长时间才能得到结果,所以我试着这样做。你的数据库在lmsEnroll和jobCurrent表中的
EMPLID
上有索引吗?有多慢?涉及多少数据?MySQL中是否也出现了同样糟糕的性能?MySQL中的性能也很慢。再说一次,我们是在谈论数百万行吗?你对慢的理解是:5秒,5分钟,50分钟?我忘了删除“sprintf”,这改变了什么?我忘了删除“sprintf”,这改变了什么?