在Cassandra中是否有可能在任何RDBMS中的select語句中的where子句之後使用多個條件聯合ed。這裏是我的代碼:選擇語句中where子句之後的OR條件的替代方法Cassandra
SELECT * from TABLE_NAME WHERE COND1= 'something' OR COND2 = 'something';
在Cassandra中是否有可能在任何RDBMS中的select語句中的where子句之後使用多個條件聯合ed。這裏是我的代碼:選擇語句中where子句之後的OR條件的替代方法Cassandra
SELECT * from TABLE_NAME WHERE COND1= 'something' OR COND2 = 'something';
答案很簡單:沒有的同等或
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] [R EVERSED] FROM [USING] [WHERE] [LIMIT N];
..
WHERE子句提供用於過濾顯示在搜索結果中的行。該子句可以過濾一個鍵名稱或鍵的範圍,對於索引列,也可以按列值進行過濾。關鍵過濾器使用KEY關鍵字(一個關係運算符)(=,>,> =,<和< =中的一個)和一個術語值指定。當關系運算符的兩側出現條件時,假定過濾器適用於索引列。使用列索引過濾器時,操作符左側的術語是名稱,右側的術語是要過濾的值。
假設COND是你的表的主鍵的名稱,你可以這樣做:
SELECT * from TABLE_NAME WHERE COND1 in ('something', 'something');
因此,不存在完全通用OR
操作,但看起來這可能相當於你是什麼試圖去做。
請記住,當您使用CQL時,該查詢計劃並不意味着它的優勢之一。 Cassandra代碼通常會假設您擁有大量數據,因此它會盡量避免執行任何可能最終導致代價高昂的查詢。在RMDBS世界中,您根據內在關係(第三範式等)構建數據,而在Cassandra中,您根據預期需要的查詢構建數據。非規範化是(原諒雙關語)規範。需要指出的是,與早期的Thrift RPC接口相比,CQL旨在成爲用於製作Cassandra查詢的更爲熟悉且友好的語法。它的目的不是完全表達和靈活的SQL的方式。
保羅,我已經嘗試了上面的語句,但是它在cql shell中顯示錯誤,指出不匹配的輸入'IN'期望設置爲空。記住在例子中COND1是二級索引。 – abhi 2012-05-10 07:05:40
對。該構造僅適用於主鍵。 – 2012-05-10 15:12:19