Cassandra CQL where子句括号

时间:2016-08-25 11:23:25

标签: cassandra datastax cql

拥有此实体

@Table(keyspace = KEYSPACE)
public class CE_TimeSeries extends Entity implements TimeSeriesPoint{

    @PartitionKey(1)
    private String typeId;
    @ClusteringColumn(value=1, asc=true)
    private String userId;
    @ClusteringColumn(value=2, asc=true)
    private Date startDate;  
    @Column
    private Date endDate;  
    @Column
    private int groupInterval;
    @Column
    private int interval;
}

这个CQL

SELECT startDate, endDate, groupInterval, interval FROM CE_TimeSeries WHERE typeId 
= :typeId and userId = :userId and ( endDate >= :fromDate or  ( startDate >= 
:fromDate and   startDate <= :toDate ) )

给出例外:

Caused by: com.datastax.driver.core.exceptions.SyntaxError: line 1:142 
mismatched input 'or' expecting ')' (... ( endDate >= :fromDate [or]  (...)

1 个答案:

答案 0 :(得分:3)

虽然我实际上并没有在这里看到问题,但我会假设您在想为什么会遇到异常。您的查询有两个问题。

  1. CQL不允许在WHERE子句中使用OR
  2. CQL不允许在WHERE子句中使用parens。另外,没有OR可用的类型可以排除对parens的需求。
  3. 最重要的是,CQL不是SQL,您可以在WHERE子句中应用的逻辑在很大程度上取决于存储模型。