这是我正在创建的表格,此表格包含有关播放最后一个杯子的玩家的信息。
CREATE TABLE players (
group text, equipt text, number int, position text, name text,
day int, month int, year int,
club text, liga text, capitan text,
PRIMARY key (name, day, month, year));
执行以下查询时:
从作为选拔队队长的最年长球员那里获得5个名字
这是我的问题:
SELECT name FROM players WHERE captain='YES' ORDER BY year DESC LIMIT 5;
我收到了这个错误:
仅当分区键受EQ或IN
限制时才支持
我认为这是我正在创建的表的问题,但我不知道如何解决它。
感谢。
答案 0 :(得分:9)
您正在尝试运行的查询的表定义不正确。
您已经定义了一个包含分区键“name”的表,聚类列“day”,“month”,“year”以及其他各种列。
在Cassandra中,所有SELECT查询都必须使用EQ或IN指定分区键。您可以使用在SQL中习惯的等式和不等式运算符来包含部分或全部集群列。
群集列必须按照定义的顺序包含在内。 ORDER BY子句只能按照定义的顺序包括尚未由EQ特定的聚类列。
例如,您可以编写查询
select * from players where name = 'fiticida' and day < 5 order by month desc;
或
select * from players where name = 'fiticida' and day = 10 and month > 2 order by month asc;
但不是
select * from players where name = 'fiticida' and year = 2017;
不包括“日”或“月”
而不是
select * from players where name = 'fiticida' and day = 5 order by year desc;
不包括“月”。
Here是SELECT查询的官方文档。
为了满足您的查询,该表需要