Rust дизель: внедрить оператор удаления на основе столбца

У меня есть следующая таблица под названием table_preference:

pid SERIAL PRIMARY KEY NOT NULL,
uuid VARCHAR (50) NOT NULL,
skill INT NOT NULL REFERENCES alldata(id) ON DELETE NO ACTION,
priority INT NOT NULL

Теперь, как я могу написать запрос, который удаляет записи для определенного uuid, который имеет n самых высоких приоритетов?

Я опробовал несколько версий, и следующая (которая работала до последней версии) больше не работает, так как не удовлетворяет некоторым требованиям. (В случае, если вам интересно, вот сообщение об ошибке черты, которое я получаю):

| |_____^ the trait `diesel::query_builder::IntoUpdateTarget` is not implemented for `diesel::query_builder::SelectStatement<types::__diesel_infer_schema::infer_table_preference::table_preference::table, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::array_comparison::In<types::__diesel_infer_schema::infer_table_preference::table_preference::columns::pid, diesel::expression::array_comparison::Subselect<diesel::query_builder::SelectStatement<types::__diesel_infer_schema::infer_table_preference::table_preference::table, diesel::query_builder::select_clause::SelectClause<types::__diesel_infer_schema::infer_table_preference::table_preference::columns::pid>, diesel::query_builder::distinct_clause::NoDistinctClause, diesel::query_builder::where_clause::WhereClause<diesel::expression::operators::Eq<types::__diesel_infer_schema::infer_table_preference::table_preference::columns::uuid, diesel::expression::bound::Bound<diesel::types::Text, std::string::String>>>, diesel::query_builder::order_clause::OrderClause<diesel::dsl::Desc<types::__diesel_infer_schema::infer_table_preference::table_preference::columns::priority>>, diesel::query_builder::limit_clause::LimitClause<diesel::expression::bound::Bound<diesel::types::BigInt, i64>>>, diesel::types::Integer>>>>`
|
= help: the following implementations were found:
          <diesel::query_builder::SelectStatement<F, diesel::query_builder::select_clause::DefaultSelectClause, diesel::query_builder::distinct_clause::NoDistinctClause, W> as diesel::query_builder::IntoUpdateTarget>

Ниже приведено утверждение, которое я в настоящее время реализовал, которое выдает вышеуказанную ошибку.

diesel::delete(
    types::table_preference::table.filter(
        types::table_preference::pid.eq_any(
            types::table_preference::table
                .select(types::table_preference::pid)
                .filter(types::table_preference::uuid.eq(uuid))
                .order(types::table_preference::priority.desc())
                .limit(i64::from(n))
        )
    )
).execute(&**conn)

Однако следующее утверждение (см. Прокомментированные области) компилируется...

    diesel::delete(
        types::table_preference::table.filter(
            types::table_preference::pid.eq_any(
                types::table_preference::table
                    .select(types::table_preference::pid)
//                    .filter(types::table_preference::uuid.eq(uuid))
//                    .order(types::table_preference::priority.desc())
//                    .limit( n )
            )
        )
    ).execute(&**conn)

0 ответов

Другие вопросы по тегам