Couchbase预准备语句(Prepared Statement)正确语法及参数问题
解决Couchbase 7.1预准备语句动态指定列名的问题
你的问题出在N1QL对参数的默认处理逻辑:普通的$column会被当作字面量字符串,而非列名标识符。所以原查询实际等价于SELECT DISTINCT 'Name' FROM bucket_name;,自然只返回传入的列名字符串。
下面是两种正确的实现方式:
方式1:使用标识符参数化
通过${column}语法将参数解析为列名标识符,直接引用对应字段:
PREPARE index_1 AS SELECT DISTINCT `${column}` FROM bucket_name; EXECUTE index_1 USING {'column': 'Name'};
方式2:使用OBJECT_GET函数
通过函数动态提取文档中的指定字段值,兼容性更强:
PREPARE index_1 AS SELECT DISTINCT OBJECT_GET(b, $column) FROM bucket_name AS b; EXECUTE index_1 USING {'column': 'Name'};
两种方式都能实现和SELECT DISTINCT Name FROM bucket_name完全一致的效果,返回指定列的去重值数组。
内容的提问来源于stack exchange,提问作者slazur83
相关产品推荐
相关产品推荐

