【发布时间】:2021-07-01 02:17:39
【问题描述】:
我的桌子看起来像:
CREATE TABLE prod_cust (
pid bigint,
cid bigint,
effective_date date,
expiry_date date,
PRIMARY KEY ((pid, cid))
);
我的以下查询在输入“或”错误时没有给出可行的选择
SELECT * FROM prod_cust
where
pid=101 and cid=201
OR
pid=102 and cid=202;
如果不支持,Cassandra 是否不支持 OR 运算符,是否有任何替代方法可以实现我的结果。
【问题讨论】:
-
撇开语法不谈,条件不明确。你的意思是
(pid=101 and cid=201) OR (pid=102 and cid=202)?或者你的意思是id=101 and (cid=201 OR pid=102) and cid=202?您可能想要前者。当 and 和 or 在这样的复合条件下完全使用时,你知道它很可能是错误的。 -
前一个,我也试过了,它给出了错误:mismatched input 'and' Expecting ')' (... where (pid = 101 [and] cid...)跨度>
-
@ernest_k 同样的条件适用于我的 RDBMS 表,因为我正在迁移到 cassandra,所以我也希望这里有同样的行为。有什么解决方法吗?
-
由于分区键是 2 个值的组合,因此它们有可能被组合成一个值——此时 OR 因为可能通过 IN。对该表的所有访问(允许过滤之外)都将使用 PID 和 CID,因此如果它们可以组合成一个值 - 您可以选择。