我使用以下代码创建表:
CREATE KEYSPACE mykeyspace
WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
USE mykeyspace;
CREATE TABLE users (
user_id int PRIMARY KEY,
fname text,
lname text
);
INSERT INTO users (user_id, fname, lname)
VALUES (1745, 'john', 'smith');
INSERT INTO users (user_id, fname, lname)
VALUES (1744, 'john', 'doe');
INSERT INTO users (user_id, fname, lname)
VALUES (1746, 'john', 'smith');
我想找到
lname
的不同值列(不是 PRIMARY KEY)。我想得到以下结果: lname
-------
smith
通过使用
SELECT DISTINCT lname FROM users;
然而自从 lname
不是 PRIMARY KEY
我收到以下错误:InvalidRequest: code=2200 [Invalid query] message="SELECT DISTINCT queries must
only request partition key columns and/or static columns (not lname)"
cqlsh:mykeyspace> SELECT DISTINCT lname FROM users;
如何从
lname
获取不同的值?
最佳答案
用户 - Undefined_variable - 提出两个好观点:
DISTINCT
仅适用于分区键。 因此,使其工作的一种方法是构建一个特定的表来支持该查询:
CREATE TABLE users_by_lname (
lname text,
fname text,
user_id int,
PRIMARY KEY (lname, fname, user_id)
);
现在,在我将您的 INSERT 运行到这个新查询表后,这有效:
aploetz@cqlsh:stackoverflow> SELECT DISTINCT lname FROm users_by_lname ;
lname
-------
smith
doe
(2 rows)
注意:在此表中,所有具有相同分区键(
lname
)的行将按 fname
排序, 如 fname
是一个聚类键。我加了 user_id
作为额外的聚类键,只是为了确保唯一性。
关于select - 在 CQL Cassandra 中查找非主键列的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35840493/