对 jcrBrowser 的 sql 查询中的运算符 IN 不起作用

Posted

技术标签:

【中文标题】对 jcrBrowser 的 sql 查询中的运算符 IN 不起作用【英文标题】:Operator IN in the sql query to jcrBrowser doesn't work 【发布时间】:2014-05-31 07:59:11 【问题描述】:

我的 jcrBrowser 中有以下结构

我想选择所有具有属性“businessGroups”并且值等于其中一些数字的节点 - 12、10、1。请参阅下面我的查询

select * from nt:base where jcr:primaryType='mgnl:component' and businessGroups IN ('10', '12', '1')

但是这个查询不起作用,我得到一个错误:

Encountered "IN" at line 1, column 81.
Was expecting one of:
    "IS" ...
    "NOT" ...
    "LIKE" ...
    "BETWEEN" ...
    "(" ...
    "." ...
    "<" ...
    "=" ...
    ">" ...
    "<>" ...
    ">=" ...
    "<=" ...

那么问题是什么?我的查询语法不正确还是运算符 IN 有问题? 顺便说一句,如果我这样改变我的查询

select * from nt:base where jcr:primaryType='mgnl:component' and businessGroups = '1'

一切正常

【问题讨论】:

【参考方案1】:

不是 Magnolia 特定的,更多的是 JCR 特定的问题。

答案很简单,JCR 搜索不是完整的 SQL,而是 SQL 指令的子集。 JCR 提供的是类似 SQL 的搜索功能。并且根本不支持“IN”。请参阅JCR specification 了解 SQL 语法(这是您在上面的查询中使用的语法)。

还有 JCR 2.0 规范,它定义了更高级的 SQL-2 syntax。你可能想切换到那个。或者您可以使用也支持搜索的 xPath。

HTH, 一月

【讨论】:

以上是关于对 jcrBrowser 的 sql 查询中的运算符 IN 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

通过删除执行计划中的排序运算符来优化 SQL 查询

sql 查询 一个表中某几列数据

SQL编程第四章:集合运算

SQL语句—where条件查询Python解释器详解实现代理池的API模块

查询表达式中的语法错误(缺少运算符)“

Netezza SQL 查询中的字符串运算符