Gop*_*opi 3 cassandra nosql scylla
scyladb 中 SELECT 语句的 WHERE 子句中的 OR 条件如何工作。
我已经在电子邮件上创建了二级索引。下面的查询工作正常并返回结果。
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)
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用 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>
Run Code Online (Sandbox Code Playgroud)
请帮助我了解如何在 Scylladb 的 where 子句中组合多个条件。
CQL(Cassandra 查询语言,也由 ScyllaDB 实现)没有通用的“OR”关键字(请参阅问题#12910 - 仅支持“AND”)。错误消息本来可以而且应该更友好(请参阅问题#1703),但最终告诉您正确的事情 - 这是一个语法错误 - 或者不是合法的 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想在表达式中使用)。
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |