Как выполнить IN в SQL запрос, используя pqxx в C++ для postgresql?

Как выполнить IN в SQL-запрос с помощью pqxx в c++ за postgresql? я имею vector<long> идентификаторов и мне нужно обновить каждую строку в таблице студентов (чтобы установить faculty_id к некоторому новому значению). Я хочу, чтобы избежать цикла, новое значение (faculty_id) Я получаю, когда я вставляю факультет с preparedINSERT заявление. Можно ли вообще передать столь итеративную структуру или создать preparedIN запрос с использованием 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() + "')";
Другие вопросы по тегам