2014-07-23 21 views
0

是否有SQL2查询等同于以下XPath查询:SQL2相当于此XPath查询

/jcr:root/content/ancestor//parent/jcr:content 

它应该返回以下节点,例如:

/content/ancestor/a/b/c/parent/jcr:content 
/content/ancestor/a/parent/jcr:content 
/content/ancestor/parent/jcr:content 

但不以下节点:

/content/xxx/a/b/c/parent/jcr:content 
/content/xxx/a/parent/jcr:content 
/content/xxx/parent/jcr:content 

回答

1

以下应该工作:

SELECT * FROM [nt:base] AS s 
    INNER JOIN [nt:base] AS parent 
    ON ISCHILDNODE(s, parent) 
WHERE 
    ISDESCENDANTNODE(s, [/content/ancestor]) AND 
    NAME(parent) = 'parent' AND 
    NAME(s) = 'jcr:content' 

如果s类型是cq:PageContentparent类型是cq:Page您可以使用这些信息来使查询速度更快:

SELECT * FROM [cq:PageContent] AS s 
    INNER JOIN [cq:Page] AS parent 
    ON ISCHILDNODE(s, parent) 
WHERE 
    ISDESCENDANTNODE(s, [/content/ancestor]) AND 
    NAME(parent) = 'parent' AND 
    NAME(s) = 'jcr:content' 
+0

你知道为什么XPATH在JCR 2中被弃用吗?与SQL2查询相比,XPath查询有时更短,更易读。 – h2o

+0

即使它已被弃用,我仍然在使用XPATH。 Internaly虽然它们被转换为SQL2。 将节点结构映射到XPATH非常容易。所以我也想知道为什么我们应该用更复杂和更难以通过XPATH读取SQL2的方式。 – Thomas

-2

,你可以很容易地转换XPath来SQL2和使用副诗句crxde中的“查询工具”enter image description here

+1

你不能。此下拉菜单的目的是定义在* Query *字段中输入的查询类型。 –