CQL 在输入 '(' 错误时没有可行的选择
CQL no viable alternative at input '(' error
我的 CQL 有问题,cassandra 给我 no viable alternative at input '(' (...WHERE id = ? if [(]...)
错误消息。我觉得我的说法有问题。
UPDATE <TABLE> USING TTL 300
SET <attribute1> = 13381990-735b-11e5-9bed-2ae6d3dfc201
WHERE <attribute2> = dfa2efb0-7247-11e5-a9e5-0242ac110003
IF (<attribute1> = null OR <attribute1> = 13381990-735b-11e5-9bed-2ae6d3dfc201) AND <attribute3> = 0;
你知道问题出在声明中吗?
拥有完整的 table 结构会有所帮助,因此为了测试您的陈述,我做了一些有根据的猜测。
有了这个table:
CREATE TABLE lwtTest (attribute1 timeuuid, attribute2 timeuuid PRIMARY KEY, attribute3 int);
只要我不在末尾添加轻量级事务,这个语句就有效:
UPDATE lwttest USING TTL 300 SET attribute1=13381990-735b-11e5-9bed-2ae6d3dfc201
WHERE attribute2=dfa2efb0-7247-11e5-a9e5-0242ac110003;
您的轻量级交易...
IF (attribute1=null OR attribute1=13381990-735b-11e5-9bed-2ae6d3dfc201) AND attribute3 = 0;
...有一些问题。
Cassandra 中的 - "null" 与其对应的 RDBMS 不相似(完全)。并非每一行的每一列都需要有一个值。 table 中某些列值没有值的 CQL 行将显示 "null." 但是您不能通过 "null" 查询,因为它实际上并不存在。
- CQL 中不存在 OR 关键字。
- 您不能在 WHERE 子句或轻量级事务中使用额外的括号来分隔条件。
牢记这些要点,以下更新和轻量级事务运行时没有错误:
UPDATE lwttest USING TTL 300 SET attribute1=13381990-735b-11e5-9bed-2ae6d3dfc201
WHERE attribute2=dfa2efb0-7247-11e5-a9e5-0242ac110003
IF attribute1=13381990-735b-11e5-9bed-2ae6d3dfc201 AND attribute3=0;
[applied]
-----------
False
我的 CQL 有问题,cassandra 给我 no viable alternative at input '(' (...WHERE id = ? if [(]...)
错误消息。我觉得我的说法有问题。
UPDATE <TABLE> USING TTL 300
SET <attribute1> = 13381990-735b-11e5-9bed-2ae6d3dfc201
WHERE <attribute2> = dfa2efb0-7247-11e5-a9e5-0242ac110003
IF (<attribute1> = null OR <attribute1> = 13381990-735b-11e5-9bed-2ae6d3dfc201) AND <attribute3> = 0;
你知道问题出在声明中吗?
拥有完整的 table 结构会有所帮助,因此为了测试您的陈述,我做了一些有根据的猜测。
有了这个table:
CREATE TABLE lwtTest (attribute1 timeuuid, attribute2 timeuuid PRIMARY KEY, attribute3 int);
只要我不在末尾添加轻量级事务,这个语句就有效:
UPDATE lwttest USING TTL 300 SET attribute1=13381990-735b-11e5-9bed-2ae6d3dfc201
WHERE attribute2=dfa2efb0-7247-11e5-a9e5-0242ac110003;
您的轻量级交易...
IF (attribute1=null OR attribute1=13381990-735b-11e5-9bed-2ae6d3dfc201) AND attribute3 = 0;
...有一些问题。
-
Cassandra 中的
- "null" 与其对应的 RDBMS 不相似(完全)。并非每一行的每一列都需要有一个值。 table 中某些列值没有值的 CQL 行将显示 "null." 但是您不能通过 "null" 查询,因为它实际上并不存在。
- CQL 中不存在 OR 关键字。
- 您不能在 WHERE 子句或轻量级事务中使用额外的括号来分隔条件。
牢记这些要点,以下更新和轻量级事务运行时没有错误:
UPDATE lwttest USING TTL 300 SET attribute1=13381990-735b-11e5-9bed-2ae6d3dfc201
WHERE attribute2=dfa2efb0-7247-11e5-a9e5-0242ac110003
IF attribute1=13381990-735b-11e5-9bed-2ae6d3dfc201 AND attribute3=0;
[applied]
-----------
False