AbstractTable.update() - 更复杂的条件?

AbstractTable.update() - more complex condition?

来自docs

int SqlUtil::AbstractTable::update (
hash  set,
hash  cond,
reference< string >   sql,
hash  opt 
) 

updates rows in the table matching an optional condition and returns the count of rows updated; no transaction management is performed with this method Example:

int ucnt = table.update(("id": id), ("name": name));

其中 ("name": name) 是条件哈希。条件可以更复杂吗?如果我有一个列表或散列 names 并且想用其中的名称更新所有行怎么办?是否可以使用一个更新语句来完成,或者我是否需要遍历 names?

是的,where 条件可以是复杂的 update statements generated by SqlUtil

where condition 由您问题的方法文档中的 cond 参数表示。

要根据值列表中的匹配更新行,请使用 op_in(),如下所示:

int rows = table.update(("col1": val1, "col2": val2), ("col3": op_in(my_list)));

这将生成 SQL 如:

update table set col1 = %v, col2 = %v where col3 in (%v)

(注意:生成的确切 SQL 会因基础数据库而异,%v 字符是生成的 SQL 中 bind by value operations 的占位符规范,其中由于前面 link)

中所述的原因,实际值单独发送到 SQL 服务器

要根据另一列值的匹配更新值,请使用 op_like(),如:

int rows = table.update(("col1": val1, "col2": val2), ("col3": op_like("%some value%")));

这将生成 SQL 如:

update table set col1 = %v, col2 = %v where col3 like %v

通常,您可以在更新方法的 where 子句中使用任何 SQL operator function