7

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

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

3 回答 3

14

假设 COND 是表主键的名称,您可以执行以下操作:

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

因此,没有完全通用的OR操作,但看起来这可能等同于您尝试做的事情。

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

重点是,与旧的 Thrift RPC 接口相比,CQL 旨在成为一种更熟悉、更友好的 Cassandra 查询语法。它并不像 SQL 那样具有完全的表现力和灵活性。

于 2012-04-26T19:55:06.887 回答
13

简单的回答:没有等价的OR

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

这是 v0.8 的命令参考:

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

选择 [FIRST N] [REVERSED] 从 [USING ] [WHERE ] [LIMIT N];

..

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

于 2012-04-16T07:52:21.513 回答
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 操作。

于 2018-06-06T20:45:46.380 回答