Вы не paste
правильно формулируете свой запрос.
Если вы выполните оператор paste
изолированно, вы увидите, что вы получите вектор длиной 5000, поэтому sqlQuery
выполняет только первый из них, соответствующий первому элементу в samRowNum
.
То, что вы хотите сделать, это что-то вроде этого:
paste("select * FROM db where row_id in (",
paste(sampRowNum,collapse = ","),")", sep="")
Точно так же, как добавленная заметка (и так как мне приходилось много чего делать, например ...), создание sql-запросов с предложением IN
со строками - это немного больше неудобства, так как вам нужно придерживаться на все одинарные кавычки:
vec <- letters[1:5]
paste("SELECT * FROM db WHERE col IN ('",
paste(vec,collapse = "','"),"')",sep = "")
[1] "SELECT * FROM db WHERE col IN ('a','b','c','d','e')"
Если вы будете делать это много, то в конечном итоге вы напишете небольшую функцию, которая сделает это для вставки векторов символов.
Как всегда, такого рода манипуляции со строками SQL не подходят, если вы работаете с пользовательским вводом (например, в веб-приложении) из-за атак с использованием SQL-инъекций. В моей конкретной ситуации это не сильно беспокоит, но в целом люди предпочитают параметризованные запросы, если вы не имеете большого контроля над входными значениями.