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 (NOT CONTAINS ...」という行を削除すると、正しい結果が得られます。また、その行を元に戻し、「AND (CONTAINS( ...」という行を削除すると、正しい結果が得られます。ただし、両方の行があると、プレスリリースではなく、アナウンスのようなものであるなど、限定すべきページがあります。

クエリが機能しない理由を知っている人はいますか? 私は SQL2 を初めて使用しますが、Web 上で同様の例を見つけることができず、一般的な用語で構文を説明しているだけです。

ありがとう!

4

1 に答える 1

0

あなたのタグの 1 つの感嘆符がワイルドカードであると想定されていたかどうかはわかりませんが、そうであれば、LIKE % 構文を使用している可能性があります。cq:tags は String[] ですが、contains をそのように使用することはできませんでした... うまくいけば、他の人が理由を言うことができます。あなたはこのようなことを試すことができます...

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 に答える