2014-11-01 2 views
3

Следующий запрос работает нормально, если только в операторе используется
SELECT META().id FROM bucket_name WHERE description IN ['Item1','Item2']N1ql -> IN оператор не работает с другими условиями

Но когда я огонь этот вопрос он дает мне пустой результат
SELECT META().id FROM bucket_name WHERE id = 123 AND description IN ['Item1','Item2']

Я что-то не так, или кто-то другой столкнулся с одной и той же проблемой?

ответ

4

Я думаю, вы должны принять ваше «IN» условие в круглые скобки, чтобы заставить его работать:

SELECT META().id FROM bucket_name WHERE id = 123 AND (description IN ['Item1','Item2']) 

Это связанно с precedence level of the operators evaluation by N1QL процессором

Если вы запустите его с EXPLAIN ключевым словом, оно будет показать, как он связывает условия друг с другом.

например.

explain SELECT META().id FROM bucket_name WHERE id = 123 AND (description IN ['Item1','Item2']) 

против

explain SELECT META().id FROM bucket_name WHERE id = 123 AND description IN ['Item1','Item2'] 
+0

Это работает! Благодаря! – PratikGandhi

2

С предварительным просмотром последних разработчиков N1QL (http://docs.couchbase.com/developer/n1ql-dp3/n1ql-intro.html) оговорка В не должны быть в круглых скобках, так что это должно работать:

SELECT META(b).id FROM bucket_name b WHERE id = 123 AND description IN ['Item1','Item2'] 

Вам необходимо пройти имя ковша (или псевдоним) в META() Я думаю, потому что N1QL теперь поддерживает запросы на несколько ковшей.

+0

Он работал так же, как вы сказали. Благодарю. – PratikGandhi

Смежные вопросы