Вставка результатов других переменных в мой запрос SQL в R - PullRequest
0 голосов
/ 27 июня 2018

Итак, я использую эти три пакета в R для подключения к некоторым базам данных и запроса к ним:

library(rJava)
library(RJDBC)
library (RPostgreSQL)

id_query <- dbGetQuery(conn2, "SELECT b.id id FROM table1 a LEFT JOIN table2 b ON a.id = b.id WHERE a.id = 1684 AND b.id <> 40378;")

Это приводит к выводу как таковому:

id
25559
30352
15352
17587
16480
16296
40449
34962
25827
37282

Но затем я хочу взять эти результаты и вставить их в предложение WHERE, которое использует IN

results_query <- dbGetQuery(con, "SELECT
i.event_date,
                              i.id,
                              i.id2,
                              i.id3,
                              i.id4,
                              i.id5,
                              COUNT(i.sales) sales,
                              COUNT(c.volume) volume
                              FROM table1 i
                              LEFT JOIN
                              table2 c
                              ON i.id = c.id
                              AND i.id2 = c.id2
                              AND i.id3 = c.id3
                              WHERE i.event_date = DATE('2018-06-18')
                              AND i.id IN (**RESULTS FROM id_query**)
                              GROUP BY 1,2,3,4,5,6
                              LIMIT 10
                              ;")

Так что я хотел бы, чтобы эта строка читалась так:

AND i.id IN (25559, 30352, 15352, 17587, 16480, 16296, 40449, 34962, 25827, 37282)

Я пытался сделать это:

results_query <- dbGetQuery(con, "SELECT
    i.event_date,
                                  i.id,
                                  i.id2,
                                  i.id3,
                                  i.id4,
                                  i.id5,
                                  COUNT(i.sales) sales,
                                  COUNT(c.volume) volume
                                  FROM table1 i
                                  LEFT JOIN
                                  table2 c
                                  ON i.id = c.id
                                  AND i.id2 = c.id2
                                  AND i.id3 = c.id3
                                  WHERE i.event_date = DATE('2018-06-18')
                                  AND i.id IN (", paste(id_query$id, collapse = ", "), ")
                                  GROUP BY 1,2,3,4,5,6
                                  LIMIT 10
                                  ;")

Какой синтаксис я получил от этого ответа , но он выдает эту ошибку:

Error in .verify.JDBC.result(s, "Unable to execute JDBC prepared statement ",  : 
  Unable to execute JDBC prepared statement SELECT
        i.event_date,
                                      i.id,
                                      i.id2,
                                      i.id3,
                                      i.id4,
                                      i.id5,
                                      COUNT(i.sales) sales,
                                      COUNT(c.volume) volume
                                      FROM table1 i
                                      LEFT JOIN
                                      table2 c
                                      ON i.id = c.id
                                      AND i.id2 = c.id2
                                      AND i.id3 = c.id3
                                      WHERE i.event_date = DATE('2018-06-18')
                                      AND i.id IN  ( (Method Connection.prepareStatement is not yet implemented)

У кого-либо есть:

A.) Решение для исправления моего текущего запроса ИЛИ

Б.) Альтернатива?

1 Ответ

0 голосов
/ 27 июня 2018

попробуйте вставить пасту (..., sep = '') в исходный запрос:

results_query <- dbGetQuery(con,  paste("SELECT 
                                      i.event_date,
                                      i.id,
                                      i.id2,
                                      i.id3,
                                      i.id4,
                                      i.id5,
                                      COUNT(i.sales) sales,
                                      COUNT(c.volume) volume
                                      FROM table1 i
                                      LEFT JOIN
                                      table2 c
                                      ON i.id = c.id
                                      AND i.id2 = c.id2
                                      AND i.id3 = c.id3
                                      WHERE i.event_date = DATE('2018-06-18')
                                      AND i.id IN (", paste(id_query$id, collapse = ", "), ")
                                      GROUP BY 1,2,3,4,5,6
                                      LIMIT 10
                                      ;", sep = ''))
...