2012-03-28 64 views
16

LIKE條件允許我們在SQL語句的where子句中使用通配符。這允許我們執行模式匹配。 LIKE條件可用於任何有效的SQL語句 - 選擇,插入,更新或刪除。像這樣是否有與Cassandra相同的查詢:LIKE Con​​dition?

SELECT * FROM users 
WHERE user_name like 'babu%'; 

與上面的操作相同,任何查詢都可用於CLI中的Cassandra。

+0

sdolgy是對的。或者,看看solandra或DSE。 – phact 2015-04-23 03:25:35

回答

11

答案很簡單:沒有的相當於LIKE

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

下面是V0.8命令參考:

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

如果您維護另一組列持有對用戶名的引用:

row :username:bab - > col:babu1,col:babar row:用戶名:babu - > col:babur

實際上,您通過預先填充您通常在RDBMS世界中搜索的所有結果。與多年前相比,存儲價格便宜......這就是爲什麼現在這是一種被接受的方法。 CPU和內存的密集程度較低,以檢索預先填充的信息列表。

+2

我不會將此答案標記爲已接受。實際上,如果要篩選的列是一個集羣鍵,則LIKE'something%'會被替換爲: SELECT * FROM users WHERE user_name <='babu'AND user_name>'babv';請參閱@ PhilippBlum的回答 – Yahor 2016-12-06 15:27:43

11

我知道:這是一個老問題,但對於這個話題的解決方案:

不能使用像Cassandra的運營商,但你可以使用範圍經營,並與範圍運算符可以解決這個「像'whatever%'「

舉例: 我有多個產品。每個產品都有自己的分區鍵(主鍵的第一部分):

CREATE TABLE user(productId int, username text, PRIMARY KEY(productId, username)); 

現在我有一些用戶:

INSERT INTO user(productId, username) VALUES (1, 'anna'); 
INSERT INTO user(productId, username) VALUES (1, 'alpha'); 
INSERT INTO user(productId, username) VALUES (1, 'andreas'); 
INSERT INTO user(productId, username) VALUES (1, 'alex'); 
INSERT INTO user(productId, username) VALUES (1, 'bernd'); 
INSERT INTO user(productId, username) VALUES (1, 'bob'); 

現在,我想找到這在有一個所有用戶開始。在SQL的世界,我在卡桑德拉使用LIKE 'A%' 我用這個:

SELECT * FROM user WHERE productId = 1 AND username > 'a' AND username < 'b'; 

結果:

productid | username 
-----------+---------- 
    1 |  alex 
    1 | alpha 
    1 | andreas 
    1 |  anna 
+1

但是,此解決方案不能用於更長的字符串 – 2016-07-21 07:46:10

+0

@Mayerz多久? – 2016-07-21 08:57:57

+0

如果我想查詞,我應該怎麼做?我想這個解決方案不好吧? – 2016-07-21 10:46:22

13

由於卡桑德拉3.4(3.5推薦),如查詢可以使用的SSTable來實現附加二級指數(SASI)。

例如:

CREATE TABLE cycling.cyclist_name ( 
    id UUID PRIMARY KEY, 
    lastname text, 
    firstname text 
); 

創建SASI如下:

CREATE CUSTOM INDEX fn_prefix ON cyclist_name (firstname) 
USING 'org.apache.cassandra.index.sasi.SASIIndex'; 

然後前綴LIKE查詢工作:

SELECT * FROM cyclist_name WHERE firstname LIKE 'M%'; 
SELECT * FROM cyclist_name WHERE firstname LIKE 'Mic%'; 

這些實施例和更多的配置選項,如後綴查詢,可以在documentation

關於SASI如何工作的更深入的解釋可以找到here