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)