在scylladb中,OR条件如何在WHERE子句中为SELECT语句工作。
我已经在电子邮件上创建了二级索引。下面的查询工作正常并返回结果。
cqlsh> select * from test.d_emp where email='robs@ex.com';
id | dept | email | first_name | last_name | salary
-----+------+-------------+------------+-----------+--------
10 | 10 | robs@ex.com | Rob | Stark | 1000
1 | 10 | robs@ex.com | Rob | Stark | 1000
101 | 10 | robs@ex.com | Rob | Stark | 1000
(3 rows)
然而,如果我使用两个条件,使用OR运算符,它会给出语法错误。即使是一个简单的1=1也会给出同样的错误。
cqlsh> select * from test.d_emp where email='robs@ex.com' or email='robs@ex';
SyntaxException: line 1:51 : syntax error...
cqlsh>
cqlsh> select * from test.d_emp where email='robs@ex.com' or 1=1;
SyntaxException: line 1:51 : syntax error...
cqlsh>
请帮助我理解如何在Scylladb中的where子句中合并多个条件。
1条答案
按热度按时间czfnxgou1#
CQL(Cassandra查询语言,也由ScyllaDB实现)没有通用的“OR”关键字(参见issue #12910- only“AND”)。错误消息本可以,也应该更友好(参见issue #1703),但最终告诉你正确的事情-这是语法错误- OR不是法律的的CQL语法。
在您的用例
where email='robs@ex.com' or email='robs@ex'
中,解决方案很简单-只需使用IN关键字:where email IN ('robs@ex.com', 'robs@ex')
.顺便说一下,
1=1
部分也不起作用,即使没有OR,因为目前CQL表达式的范围相当有限,在这种情况下,column=value
是有效的表达式,但value=value
或其他东西不是。问题#12906是改进的一步,但是对于你的用例,你并不真正需要它(你并不真的想在你的表达式中使用1=1
)。