2013-09-25 130 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是對的,但我擔心它與兩個合成查詢合併時效率如何。如果我合併兩個結果查詢,我認爲它可能會變得複雜,因爲我有很多數據在表中 –