Cassandra CQL where子句括号

Cassandra CQL where clause parentheses

拥有这个实体

@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. CQL 不允许在 WHERE 子句中使用 OR
  2. CQL 不允许在 WHERE 子句中使用括号。另外,没有 OR 可用类型排除了对括号的需要。

归根结底,CQL 不是 SQL,您可以在 WHERE 子句中应用的逻辑在很大程度上取决于存储模型。