能否通过CQL查询返回布尔值,判断集合是否包含特定值?
在Cassandra中用CQL返回布尔值验证集合是否包含特定值
要实现根据Id判断对应集合是否包含指定值并返回布尔结果,有两种可行的方案:
1. 使用CASE表达式(兼容多数Cassandra版本)
这是适配Cassandra 3.x及以上版本的通用写法,通过CASE语句将集合包含条件转换为布尔值返回:
SELECT CASE WHEN Roles CONTAINS 'Pilot' THEN true ELSE false END AS has_pilot FROM Test WHERE Id = '123';
执行后会得到一列名为has_pilot的结果,值为true或false,对应Roles集合是否包含Pilot。
2. 使用contains()内置函数(Cassandra 4.0及以上)
如果你的Cassandra版本是4.0或更高,可以直接用内置的contains()函数,写法更简洁:
SELECT contains(Roles, 'Pilot') AS has_pilot FROM Test WHERE Id = '123';
该函数会直接返回布尔值,结果和CASE表达式的方式完全一致。
补充说明
你之前尝试的SELECT Roles CONTAINS 'Pilot'语法无效,是因为CQL的SELECT子句不允许直接写条件表达式,必须通过CASE包装或调用内置函数,将条件转换为可返回的列。
内容的提问来源于stack exchange,提问作者Sergey Kalinichenko
相关产品推荐
相关产品推荐

