如何在Phantom DSL中为ScyllaDB的WHERE子句使用OR条件?
解决Phantom DSL中ScyllaDB查询OR条件的语法问题
你遇到的错误是因为Phantom DSL的SelectQuery对象并没有提供直接链式调用的.or()方法,之前的写法不符合库的API规范。
正确写法示例
方式一:在单个where中直接用or连接条件
db.object .select .where(_.businessEmail eqs "abc@gmail.com" or _.homeEmail eqs "abc@gmail.com" or _.additionalEmail eqs "abc@gmail.com") .fetch()
方式二:拆分条件后组合(适合条件较多的场景)
// 先定义组合好的条件 val emailCondition = _.businessEmail eqs "abc@gmail.com" or _.homeEmail eqs "abc@gmail.com" or _.additionalEmail eqs "abc@gmail.com" // 传入where执行查询 db.object .select .where(emailCondition) .fetch()
额外注意事项
ScyllaDB(基于CQL)对OR条件有使用限制:
- 所有通过
OR连接的条件,必须包含至少一个分区键列(如果表定义了分区键),否则会触发全表扫描,性能极差甚至无法执行 - 如果场景允许,也可以考虑用
IN替代OR,但IN同样需要遵循分区键相关的使用规则
内容的提问来源于stack exchange,提问作者Zaryab Ali
相关产品推荐
相关产品推荐

