gpt4 book ai didi

sparql - WHERE 子句中 UNION 和 BIND 的用途,实现自动编号

转载 作者:行者123 更新时间:2023-12-05 01:16:16 24 4
gpt4 key购买 nike

我正在尝试使用 sparql/sesame 查询来实现递增/递减。我遇到了How to model consecutive numbering without transactions? ,它提出了这个查询:

INSERT {
_:ex a ex:Invoice ;
ex:number ?next .
}
WHERE {
{
SELECT ((MAX(?number) + 1) AS ?next)
WHERE {
{ ?x ex:number ?number ;
a ex:Invoice }
UNION
{ BIND (0 AS ?number) }
}
}
}

我不明白 where 子句中 union 的用途。 where 子句和 bind 发生了什么?如果没有三元组,bind 绑定(bind)的值是否用作默认值,这意味着 0 将是第一个数字?

编辑:跟进:

快速澄清....我帖子中的查询(使用合并)将插入多行(这是该查询的目的)。我如何修改该查询以仅增加/减少 1 行?如果我在插入之前添加 DELETE,那么行为是什么? ?next 会在它被选中之前被删除吗???/

DELETE {
_:ex a ex:Invoice ;
ex:number ?object .
}
INSERT {
_:ex a ex:Invoice ;
ex:number ?next .
}
WHERE {
{
SELECT ((MAX(?number) + 1) AS ?next)
WHERE {
{ ?x ex:number ?number ;
a ex:Invoice }
UNION
{ BIND (0 AS ?number) }
}
}
}

我可以使用上面的查询只增加 1 行并第一次插入值为 0 的行吗??

最佳答案

是的。

发生的是联合的两个参数都提供了一个解决方案(第二个参数始终提供 0),然后投影中的 MAX 确保选择了最大的数字。因此在大多数情况下,第二个 UNION 参数实际上什么都不做。但是,如果第一个参数没有提供解决方案(因为还没有发票编号),只有第二个参数会提供解决方案,这将被选为最大值,然后插入 (+1) 作为第一个数。

关于sparql - WHERE 子句中 UNION 和 BIND 的用途,实现自动编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19082144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com