Cassandra中的多列相等限制

Cassandra中的多列相等限制,cassandra,cql,Cassandra,Cql,考虑下表: CREATE TABLE routes ( start text, end text, validFrom timestamp, validTo timestamp, PRIMARY KEY (start, end, validFrom, validTo) ); 如何编写一个cql查询来查找从a点到B点并且在日期x和日期y之间有效的所有路由。本质上等同于以下SQL语句: SELECT * from routes where start = 'A' and end = 'B' and

考虑下表:

CREATE TABLE routes (
start text,
end text,
validFrom timestamp,
validTo timestamp,
PRIMARY KEY (start, end, validFrom, validTo)
);
如何编写一个cql查询来查找从a点到B点并且在日期x和日期y之间有效的所有路由。本质上等同于以下SQL语句:

SELECT * from routes where start = 'A' and end = 'B' and validFrom <= x and validTo >= y.
从开始='A'和结束='B'且有效起始=y的路由中选择*。
我一直在阅读,我的印象是,对于给定的表,这样的查询是不可能的。如果是这种情况,那么如何对数据进行建模以启用这种查询呢

SELECT * from routes where start = 'A' and end = 'B' and validFrom <= x and validTo >= y
通过将to/from
valid
时间合并到一个列中,您现在可以对其执行范围查询,检查开始和结束。每行需要存储两次。一次使用“有效至”时间,一次使用“有效自”时间。
toFrom
列有助于区分这一点

现在我可以运行此查询:

> SELECT * FROM routes 
    WHERE start='A' AND end='B' 
    AND valid>='2016-02-01'AND valid<='2016-02-20';

 start | end | valid                    | tofrom | name
-------+-----+--------------------------+--------+---------
     A |   B | 2016-02-01 06:00:00+0000 |      F | combo 1
     A |   B | 2016-02-14 06:00:00+0000 |      T | combo 1
     A |   B | 2016-02-15 06:00:00+0000 |      F | combo 2

(3 rows)
话虽如此,我明白你的意思。如果您应该选择一个发生在有效到/从(不包括在内)之间的时间段,它将产生零行…如下所示:

    > SELECT * FROM routes 
    WHERE start='A' AND end='B' 
    AND valid>='2016-02-02'AND valid<='2016-02-13';

 start | end | valid                    | tofrom | name
-------+-----+--------------------------+--------+---------

(0 rows)
>从路由中选择*
在哪里开始class='A'和结束class='B'

有效>='2016-02-02'和有效='2016-02-01'和有效='2016-02-01'和有效-我接受了你的答案,但现在我又想了一些,我认为这行不通。例如,我认为查询:
SELECT*FROM routes WHERE start='A'和end='B'以及valid>='2016-02-01'和validopologies-我在原始sql语句中输入了一个错误。它应该是有效的
> SELECT * FROM routes 
    WHERE start='A' AND end='B' 
    AND valid>='2016-02-01'AND valid<='2016-02-13';

 start | end | valid                    | tofrom | name
-------+-----+--------------------------+--------+---------
     A |   B | 2016-02-01 06:00:00+0000 |      F | combo 1

(1 rows)
    > SELECT * FROM routes 
    WHERE start='A' AND end='B' 
    AND valid>='2016-02-02'AND valid<='2016-02-13';

 start | end | valid                    | tofrom | name
-------+-----+--------------------------+--------+---------

(0 rows)