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] (...)
虽然我实际上在这里没有看到问题,但我假设您想知道为什么会出现异常。您的查询有两处错误。
- CQL 不允许在 WHERE 子句中使用
OR
。
- CQL 不允许在 WHERE 子句中使用括号。另外,没有
OR
可用类型排除了对括号的需要。
归根结底,CQL 不是 SQL,您可以在 WHERE 子句中应用的逻辑在很大程度上取决于存储模型。
拥有这个实体
@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] (...)
虽然我实际上在这里没有看到问题,但我假设您想知道为什么会出现异常。您的查询有两处错误。
- CQL 不允许在 WHERE 子句中使用
OR
。 - CQL 不允许在 WHERE 子句中使用括号。另外,没有
OR
可用类型排除了对括号的需要。
归根结底,CQL 不是 SQL,您可以在 WHERE 子句中应用的逻辑在很大程度上取决于存储模型。