在select语句Cassandra中where子句之后的OR条件的替代

时间:2012-04-13 10:46:43

标签: select cassandra where cql

在Cassandra中是否可以在select语句中的where子句之后使用多个条件联合在一起,就像在任何RDBMS中一样。这是我的代码:

SELECT * from TABLE_NAME WHERE COND1= 'something' OR COND2 = 'something';  

3 个答案:

答案 0 :(得分:12)

简单回答:没有等效的 OR

http://www.datastax.com/docs/0.8/dml/using_cql

以下是v0.8的命令参考:

http://www.datastax.com/docs/0.8/references/cql#cql-reference

  

从[USING]中选择[FIRST N] [REVERSED]   [在哪里] [LIMIT N];

..

  

WHERE子句用于过滤结果中显示的行。该子句可以过滤键名或键范围,对于索引列,可以过滤列值。使用KEY关键字,关系运算符(=,>,> =,<和< =之一)和术语值来指定密钥过滤器。当术语出现在关系运算符的两侧时,假定过滤器适用于索引列。对于列索引过滤器,运算符左侧的术语是名称,右侧的术语是要过滤的值。

答案 1 :(得分:11)

假设COND是表主键的名称,您可以这样做:

SELECT * from TABLE_NAME WHERE COND1 in ('something', 'something');

因此,没有完全通用的OR操作,但看起来这可能与您尝试的操作相同。

请记住,当您使用CQL时,该查询计划并不意味着它的优势之一。 Cassandra代码通常会假设您拥有大量数据,因此它会尽量避免执行任何可能最终成本高昂的查询。在RMDBS世界中,您可以根据内在关系(第三范式等)构建数据,而在Cassandra中,您可以根据预期需要的查询来构建数据。非规范化是(原谅双关语)规范。

重点是,与旧的Thrift RPC接口相比,CQL是用于制作Cassandra查询的更熟悉,友好的语法。它不像SQL那样具有完全表现力和灵活性。

答案 2 :(得分:0)

以下是CQL v3的语法:

SELECT * | select_expression | DISTINCT partition 
FROM [keyspace_name.] table_name 
[WHERE partition_value
   [AND clustering_filters 
   [AND static_filters]]] 
[ORDER BY PK_column_name ASC|DESC] 
[LIMIT N]
[ALLOW FILTERING]

那么你不能像SQL那样使用OR操作。