如何編寫查詢來查找具有空/空字段的表中的所有記錄?我試過下面的查詢,但它沒有返回任何東西。如何使用CQL搜索具有空/空字段的記錄?
SELECT * FROM book WHERE author = 'null';
如何編寫查詢來查找具有空/空字段的表中的所有記錄?我試過下面的查詢,但它沒有返回任何東西。如何使用CQL搜索具有空/空字段的記錄?
SELECT * FROM book WHERE author = 'null';
null
領域不存在卡桑德拉。
您可能會想到CQL數據模型,它隱藏了某些實現細節以便擁有更易於理解的數據模型。卡桑德拉是稀疏的,這意味着只有實際使用的數據才被存儲。您可以通過將一些測試數據通過CQL添加到Cassandra來將其可視化。
cqlsh> CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1 } ;
cqlsh> use test ;
cqlsh:test> CREATE TABLE foo (name text, age int, pet text, primary key (name)) ;
cqlsh:test> insert into foo (name, age, pet) values ('yves', 81, 'german shepherd') ;
cqlsh:test> insert into foo (name, pet) values ('coco', 'ferret') ;
cqlsh:test> SELECT * FROM foo ;
name | age | pet
-----+-----+------------------
coco | null | ferret
yves | 81 | german shepherd
所以,即使它似乎有一個空值,實際值是不存在的 - CQL是向你們表示null
,因爲這更有意義,直觀。
如果你看看從節儉方面的表格,你可以看到該表格不包含coco
的年齡。
$ bin/cassandra-cli
[[email protected]] use test;
[[email protected]] list foo;
RowKey: coco
=> (name=, value=, timestamp=1389137986090000)
=> (name=age, value=00000083, timestamp=1389137986090000)
-------------------
RowKey: yves
=> (name=, value=, timestamp=1389137973402000)
=> (name=age, value=00000051, timestamp=1389137973402000)
=> (name=pet, value=6765726d616e207368657068657264, timestamp=1389137973402000)
在這裏,你可以清楚地看到,yves
有兩列:age
和pet
,而coco
只有一個:age
。
據我所知,你不能用NULL
做到這一點。
作爲替代方案,你可以使用不同的空值,例如空字符串:''
在這種情況下,你可以用這樣一個空的作者選擇的所有書籍(假設筆者列適當索引) :除非你自己添加這些
SELECT * FROM book WHERE author = '';
如果你在Cassandra上使用Solr,但不知道直接Cassandra查詢,這將起作用。
SELECT * FROM BOOK WHERE solr_query = ' -author : [* TO *] '