这是我的表
CREATE TABLE quorum.omg (
id int,
a int,
b text,
c text,
PRIMARY KEY ((id, a), b)
) WITH CLUSTERING ORDER BY (b DESC)
当我使用IN运算符执行select语句时,它适用于最后一个分区键和最后一个聚类键
SELECT * FROM omg WHERE id=1 AND a IN ( 1,2) AND b IN ( 'a','b' ) ;
id | a | b | c
----+---+---+----
1 | 1 | b | hi
1 | 2 | a | hi
但是当我更新并删除它时会抛出这样的错误
UPDATE omg SET c = 'lalala' WHERE id=1 AND a IN ( 1,2) AND b IN ( 'a','b' ) ;
InvalidRequest: code=2200 [Invalid query] message="Invalid operator IN for PRIMARY KEY part b"
DELETE from omg WHERE id=1 AND a IN ( 1,2) AND b IN ( 'a','b' ) ;
InvalidRequest: code=2200 [Invalid query] message="Invalid operator IN for PRIMARY KEY part b"
我的错误是什么?提前谢谢。
答案 0 :(得分:3)
来自UPDATE(http://docs.datastax.com/en/cql/3.1/cql/cql_reference/update_r.html)的DataStax文档:
仅支持分区键的最后一列的IN关系。
您的上一个分区键是a
,但您尝试在群集密钥b
上使用它。尝试使用WHERE子句中的特定完整主键更新/删除。
答案 1 :(得分:0)
一般情况下,最好避免需要允许过滤的查询,因为即使只返回少量数据,它们也经常需要扫描大量数据,但是我展示了这个例子,因为它支持使用IN运算符
更多详细信息,请参阅此链接 http://mechanics.flite.com/blog/2014/01/08/the-in-operator-in-cassandra-cql/