我最近开始使用Cassandra,我知道Cassandra会阻止用户通过主键删除表中的所有记录。 因为您还需要提供所有群集密钥。
我尝试使用标准的sql,例如:
UPDATE my_table SET is_deleted = 'true' WHERE COUNTRY = 'XXX' AND user_id IN (SELECT user_id FROM my_table WHERE COUNTRY = 'XXX');
我得到的错误是:
SyntaxException: line 1:113 mismatched input 'SELECT' expecting ')' (... 1 AND user_id IN ([SELECT]...)
请告知。
答案 0 :(得分:0)
您无法在cassandra中使用嵌套查询。
您必须使用两个单独的查询。
首先从user_id
mytable
SELECT user_id FROM mytable WHERE COUNTRY = 'XXX'
秒对于前面步骤中找到的每个user_id
UPDATE my_table SET is_deleted = 'true' WHERE COUNTRY = 'XXX' AND user_id = 'XXX'
您可以使用executeAsync
执行第二个查询。
如果user_id
是分区键,您还可以在查询中使用更新,但建议使用小user_id
列表
UPDATE my_table SET is_deleted = 'true' WHERE COUNTRY = 'XXX' AND user_id in ('XXX', 'XXY', 'XXZ')