Смешивание одиночных и двойных кавычек в функции R paste?

Это кажется смешным, но я просто не могу это понять - любая помощь очень ценится, пожалуйста!

В основном: я использую RMySQL для создания простого SQL-кода, чтобы понять, как работает SQL. Я хотел бы объединить несколько запросов на select SQL, как простой пример. Это описано в PDF файле RMySQL, но пример в нем, по-видимому, является неправильным синтаксисом (http://cran.r-project.org/web/packages/RMySQL/RMySQL.pdf, стр. 3, пример 6).

Если у меня есть три запроса, скажите вот так:

q1 <- "SELECT db.table FROM table WHERE stuff = 'blah' "
q2 <- "SELECT db.other_table FROM other_table WHERE stuff = 'different blah' "
q3 <- "SELECT db.table2 FROM table2 WHERE table2 = 1000"

и попробуйте paste их следующим образом:

script <- paste(q1, q2, q3, sep=";")

результат

> script
[1] "SELECT db.table FROM table WHERE stuff = 'blah' ;SELECT fb.other_table FROM
other_table WHERE stuff = 'different blah' ;SELECT db.table2 FROM table2 WHERE table2 =
'1000'

и поэтому dbSendQuery явно терпит неудачу.

Я пробовал \", но это также не работает:

q1 <- "SELECT db.table FROM table WHERE stuff = 'blah' \" "
q2 <- "SELECT db.other_table FROM other_table WHERE stuff = 'different blah' \""
q3 <- "SELECT db.table2 FROM table2 WHERE table2 = 1000 \" "

script <- paste(q1, q2, q3, sep=";")

> script
[1] "SELECT db.table FROM table WHERE stuff = 'blah' \" ; ;SELECT db.other_table FROM
other_table WHERE stuff = 'different blah' \";SELECT db.table2 FROM table2 WHERE table2
= 1000 \" "

Может ли кто-нибудь указать, что я делаю неправильно?

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

my.queries <- dbGetQuery(my.con, script, client.flag = CLIENT_MULTI_STATEMENTS)

согласно руководству RMySQL, я получаю

RS-DBI driver: (could not run statement: You have an error in your SQL syntax;

Предположительно, это связано с тем, что результатом функции paste должно быть:

"SELECT db.table FROM table WHERE stuff = 'blah'" ;"SELECT fb.other_table FROM
other_table WHERE stuff = 'different blah'" ;"SELECT db.table2 FROM table2 WHERE table2
= '1000'"

Каждый из отдельных запросов работает очень хорошо, поэтому я предполагаю, что это моя команда paste которая вызывает проблему.

EDIT: для упрощения: предположим, что у меня две строки:

t1 <- "the 'stuff'"
t2 <- "more 'stuff'"
paste(t1, t2, sep=";")
[1] "the 'stuff' ; more 'stuff' "

я бы хотел, чтобы результат команды paste был "the 'stuff'";"more 'stuff'".

1 ответ

Вы должны передать аргумент client.flag = CLIENT_MULTI_STATEMENTS функции dbConnection, а не dgGetQuery.

Тогда ваш первый подход должен работать:

q1 <- "SELECT db.table FROM table WHERE stuff = 'blah' "
q2 <- "SELECT db.other_table FROM other_table WHERE stuff = 'different blah' "
q3 <- "SELECT db.table2 FROM table2 WHERE table2 = 1000"

script <- paste(q1, q2, q3, sep=";")

licensed under cc by-sa 3.0 with attribution.