0

我有以下查询,它没有产生任何结果,但没有错误。我正在尝试选择所有不是“精选新闻稿”并且属于某种类型的页面,例如“公告”。

SELECT parent.* FROM [cq:Page] AS parent INNER JOIN [nt:base] 
AS child ON ISCHILDNODE(child,parent) WHERE ISDESCENDANTNODE(parent,     '/content/acme/en_US/site-content/content-modules/resources/press-releases')  
AND (NOT CONTAINS(child.[cq:tags], 'acme-    www:FeaturedResources/FeaturedPressRelease*')) 
AND (CONTAINS(child.[cq:tags], 'acme-www:PressReleaseType/Announcement')) 
AND child.[pressReleaseDate] > CAST('2015-01-01T00:00:00.000Z'  AS DATE)  
AND child.[pressReleaseDate] < CAST('2016-01-01T00:00:00.000Z'  AS DATE)  
order by child.[jcr:title]

如果我删除“AND(不包含...”行,我会得到正确的结果。另外,如果我把那行放回去,并删除“AND(CONTAINS(...”)行,我会得到正确的结果。但是有两行在那里同时给我没有结果。有些页面应该是合格的,即它们不是特色新闻稿,它们是公告类型,所以在我看来,这在逻辑上应该可行。

有谁知道查询不起作用的任何原因?我是 SQL2 的新手,我在网上找不到任何类似的例子,只是一般性的语法描述。

谢谢!

4

1 回答 1

0

我不确定您的一个标签中的 splat 是否应该是通配符,但如果是这样,可能会使用 LIKE % 语法。cq:tags 是一个字符串 [],但我没有运气使用这样的包含...希望其他人能说出原因。你可以尝试这样的事情......

SELECT parent.* FROM [cq:Page] AS parent INNER JOIN [nt:base]
AS child ON ISCHILDNODE(child,parent) WHERE ISDESCENDANTNODE(parent,     '/content/acme/en_US/site-content/content-modules/resources/press-releases')
AND NOT (child.[cq:tags] = 'acme-www:FeaturedResources/FeaturedPressRelease')
AND child.[cq:tags] = 'acme-www:PressReleaseType/Announcement'
AND child.[pressReleaseDate] > CAST('2015-01-01T00:00:00.000Z'  AS DATE)
AND child.[pressReleaseDate] < CAST('2016-01-01T00:00:00.000Z'  AS DATE)
order by child.[jcr:title]
于 2015-12-10T23:12:03.370 回答