我有一个带有IN参数的Cassandra SELECT查询,我想通过Node驱动程序运行,但无法弄清楚语法。
在cqlsh控制台上,我可以运行此选择并获得正确的结果:
SELECT * FROM sourcedata WHERE company_id = 4 AND item_id in (ac943b6f-0143-0e1f-5282-2d39209f3a7a,bff421a0-c465-0434-8806-f128612b6850,877ddb6d-a164-1152-da77-1ec4c4468258);
但是,尝试使用Cassandra Node驱动程序使用ID数组运行此查询时,我会根据格式获得各种错误。以下是我尝试过的内容:
client.execute("SELECT * FROM sourcedata WHERE company_id = ? AND item_id in (?)", [id, item_ids], function(err, rs) { ...
错误是:
ResponseError:类型为uuid
的item_id的列表文字无效有了这个:
client.execute("SELECT * FROM sourcedata WHERE company_id = ? AND item_id in (?)", [id, item_ids], function(err, rs) { ...
错误是:
ResponseError:第1:72行在输入中没有可行的选择' [' (... WHERE company_id = 4 AND [item_id] in ...)
item_ids是一个字符串对象数组,它们是通过另一个Cassandra表上的select获取的。
这是一个有效的应用,以及其他不使用" SELECT .. IN"工作得很好。
我也可以让它起作用"丑陋"方式,但不愿意:
client.execute("SELECT * FROM sourcedata WHERE company_id = ? AND item_id in (" + item_ids.toString() + ")", [id,], function(err, rs) { ...
答案 0 :(得分:4)
您应该使用不带括号的IN ?
来提供列表:
const query = 'SELECT * FROM sourcedata WHERE company_id = ? AND item_id in ?';
client.execute(query, [ id, item_ids ], { prepare: true }, callback);