Cassandra CQLSH 中的 OR 操作

3
SELECT * FROM sample WHERE id = '2' OR uid = '1';

我在cqlsh中遇到了错误

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

在使用时,Cassandra中是否可以使用运算符?
2个回答

4

虽然doanduyhai的原则是正确的,但如果您需要限制在同一列上,则可以使用'IN'运算符:

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

请查看文档
您可用的操作类型与数据模型密切相关。我强烈推荐datastax文档中的数据模型部分

小心,WHERE子句不适用于同一列:“*WHERE id ='2' OR uid ='1'*。第一个条件适用于id列,第二个条件适用于uid列。IN子句在此处无效。 - doanduyhai
我强调了建议的用例。你的查询似乎有些奇怪,并暗示需要在数据模型上进行更多的工作。如果你需要查询两个完全不同的索引,最好为每个创建两个不同组织的表/列族以获得最佳读取性能。 - John
@omnibear 谢谢你的回答。但是在你的情况下,你是将值与单个列名id进行比较。而我需要将两个列ID和UID进行比较。doanduyhai是正确的,但我担心在与两个结果查询合并时它的效率如何。如果我合并两个结果查询,我认为它可能会变得复杂,因为表中有很多数据。 - Hari Haran
@HariHaran,你能否更新一下你的问题并告诉我们使用情况?这将有助于更好地理解问题,也许能提出不同的解决方案。 - John
id | uid | expid | value ----+------+-------+------------------- 4 | babu | hari | 你好吗 3 | hari | babu | 你好吗 5 | babu | hari | 这是测试用例 2 | hari | babu | 你好吗 1 | hari | babu | 你好吗SELECT value FROM test WHERE id = 'babu' OR expid = 'babu'; 如果uid或expid中有babu,则返回value。如果我使用两个select查询,那么我将分别获得结果,我无法合并聊天的值。 - Hari Haran
@HariHaran请编辑您的原始问题并添加更多信息(评论不适合此操作)。请在抽象级别上描述您的用例/应用程序应存储哪些类型的信息以及要运行哪些查询。 - John

4

@Hari

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

无论如何,CQL语言看起来类似于SQL,但语义非常不同。建议查看文档以了解更多细节。


那么,我该如何在CQL中实现OR操作(类似于SQL)? - Hari Haran
3
目前唯一的方法是在客户端触发2个查询,然后合并结果集(collection)。请注意不要改变原意。 - doanduyhai
你能给我提供一些示例吗?因为我在Cassandra方面非常新手。 - Hari Haran
1
正如@doanduyhai所说,只需运行两个单独的查询并在客户端组合结果:SELECT * FROM sample WHERE id ='2';SELECT * FROM sample WHERE uid ='1'; - Ike Walker
感谢@doanduyhai的正确指导,但是我对将两个查询结果合并后的效率有所担忧。如果我合并两个查询结果,可能会变得非常复杂,因为我的表中有很多数据。 - Hari Haran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接