3

Node ドライバー経由で実行したい IN パラメーターを持つ Cassandra SELECT クエリがありますが、構文がわかりません。

cqlsh コンソールで、この select を実行して正しい結果を得ることができます。

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 .. IN」を使用しない他のクエリは正常に動作します。

「醜い」方法で動作させることもできますが、そうしないことをお勧めします。

client.execute("SELECT * FROM sourcedata WHERE company_id = ? AND item_id in (" + item_ids.toString() + ")", [id,], function(err, rs) { ...
4

1 に答える 1