2014-07-23 23 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 *字段中輸入的查詢類型。 –