2013-09-25 131 views
3
SELECT * FROM sample WHERE id = '2' OR uid = '1'; 

我使用cqlsh客户在cqlsh错误OR操作卡桑德拉cqlsh

Bad Request: line 1:36 missing EOF at 'OR' 

是否有可能在卡桑德拉or操作?

回答

4

@Hari

OR操作不受CQL支持。只有AND操作受到支持,但有一些限制。

无论如何,CQL语言看起来类似于SQL,但语义有很大不同。我建议看看documentation了解更多详情。

+0

那么,如何在CQL中实现OR操作(如SQL) –

+3

您应该触发2个查询,然后在客户端合并结果(集合)。现在没有其他办法了。 – doanduyhai

+0

可以为我提供任何示例,因为我是cassandra的新手 –

4

虽然doanduyhai是正确的原则,有“IN”操作符,如果你需要在限制同一列

cqlsh:demodb> SELECT * FROM sample WHERE id IN ('2','1'); 

看一看the documentation

可用的操作类型在很大程度上取决于数据模型。我强烈推荐the data model section in datastax' documentation

+0

小心,WHERE子句不适用于同一列:* WHERE id ='2'或uid ='1'; *。第一个条件适用于** id **列,第二个条件适用于** uid **列。 IN子句在这里不起作用 – doanduyhai

+0

我强调了建议的用例。您的查询似乎有点奇怪,并且表明需要对数据模型进行更多的工作。如果您需要查询两个完全不同的索引,则可能需要创建两个不同组织的表/列族,以获得最佳读取性能。 – omnibear

+0

@omnibear谢谢你的答案..但在你的情况下,你是比较值与单列名称作为ID。我需要将两列作为ID和UID进行比较。 doanduyhai是对的,但我担心它与两个合成查询合并时效率如何。如果我合并两个结果查询,我认为它可能会变得复杂,因为我有很多数据在表中 –