我有一个要在MarkLogic中以Javascript
查询类型实现的SQL
查询。目标是返回查询结果的所有URIs
。
下面的是我想要转换的SQL查询:
SELECT * FROM DOCUMENT_TABLE
WHERE WADCTO IN ('WM', 'WO')
AND (WASRST NOT IN ('02', 'M', 'M9')) AND (WASTRX = 0)
这里是我在查询控制台中测试的当前Javascript查询,但返回的行数与SQL查询不同:
cts.uris(null, null,
cts.andQuery([
cts.collectionQuery("JDEdwards"),
cts.collectionQuery("WorkOrder_Document"),
cts.andQuery([
cts.orQuery([
cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WADCTO"),"=","WO"),
cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WADCTO"),"=","WM")
]),
cts.andQuery([
cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WASRST"),"!=","02"),
cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WASRST"),"!=","M"),
cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WASRST"),"!=","09")
]),
cts.elementRangeQuery(fn.QName("http://www.example.com/ads/JDEdwards/document", "WASTRX"),"=","0")
])
])
);
请注意,我为元素WADCTO
、WASRST
和WASTRX
设置了范围索引。
我的代码逻辑是否有任何缺失或错误?
发布于 2018-09-25 03:21:40
范围查询可以指定与OR相关的值列表。此外,cts.notQuery()
还可以否定查询。可能与下面的草图类似的东西可能会变得更接近。
cts.uris(null, null,
cts.andQuery([
cts.collectionQuery("JDEdwards"),
cts.collectionQuery("WorkOrder_Document"),
cts.elementRangeQuery(fn.QName("...", "WADCTO"),"=", ["WO", "WM"]),
cts.notQuery(
cts.elementRangeQuery(fn.QName("...", "WASRST"),"=", ["02", "M", "09"])
),
cts.elementRangeQuery(fn.QName("...", "WASTRX"),"=", "0")
]);
需要检查的内容包括
对于elements
如果其他方法都失败了,请尝试删除查询子句,直到查询能够找到有问题的查询子句为止。
希望这能有所帮助,
https://stackoverflow.com/questions/52474985
复制相似问题