Как выполнить IN в SQL запрос, используя pqxx в C++ для postgresql?
Как выполнить IN
в SQL-запрос с помощью pqxx
в c++
за postgresql
? я имею vector<long>
идентификаторов и мне нужно обновить каждую строку в таблице студентов (чтобы установить faculty_id
к некоторому новому значению). Я хочу, чтобы избежать цикла, новое значение (faculty
_id) Я получаю, когда я вставляю факультет с prepared
INSERT
заявление. Можно ли вообще передать столь итеративную структуру или создать prepared
IN
запрос с использованием pqxx?
void prepareChangeFaculty(connection_base &c){
const std::string sql =
"UPDATE students SET faculty_id=$2 WHERE id IN $1"; // here is a problem
c.prepare("change_faculty", sql);
}
$ 1 У меня есть как вектор id строк, которые мне нужно обновить
1 ответ
Почему не что-то подобное ( Как объединить std::string и int?) В C++11
string a="";
for (int k=0;k<myVector.size();k++){
a += string(myVector[k]);
if (k<myVector.size()-1){
a += ",";
}
}
std::string sql = "UPDATE students SET faculty_id=$2 WHERE id IN (" + a + ")";
Я понимаю озабоченность @Massa, однако я не смог найти другого решения, чем @Alexandros.
Итак, небольшое улучшение этого решения может заключаться в использовании std::copy
std::stringstream params;
std::copy(
myVector.begin(), myVector.end(),
std::ostream_iterator<std::string>(params, ","));
std::string sql = "UPDATE students SET faculty_id=$2 WHERE id IN ('"
+ params.str() + "')";