7

Cassandraで、他のRDBMSのように、selectステートメントのwhere句の後に結合された複数の条件を使用することは可能ですか。これが私のコードです:

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を使用する場合、クエリ計画はその長所の1つではないことを忘れないでください。Cassandraコードは通常、大量のデータがあることを前提としているため、コストがかかる可能性のあるクエリの実行を回避しようとします。RMDBSの世界では、固有の関係(第3正規形など)に従ってデータを構造化しますが、Cassandraでは、必要と予想されるクエリに従ってデータを構造化します。非正規化は(しゃれを許して)標準です。

重要なのは、CQLは、古いThriftRPCインターフェースよりも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

SELECT [FIRST N] [REVERSED] FROM [USING] [WHERE] [LIMIT N];

..

WHERE句は、結果に表示される行をフィルタリングするために提供されます。この句は、キー名またはキーの範囲でフィルタリングでき、インデックス付き列の場合は列値でフィルタリングできます。キーフィルターは、KEYキーワード、関係演算子(=、>、> =、<、および<=のいずれか)、および用語値を使用して指定されます。関係演算子の両側に用語が表示される場合、フィルターはインデックス付きの列に適用されると見なされます。列インデックスフィルターでは、演算子の左側の用語が名前であり、右側の用語がフィルターの値です。

于 2012-04-16T07:52:21.513 に答える
0

CQLv3の構文は次のとおりです。

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 に答える