我正在尝试使用 sparql/sesame 查询来实现递增/递减。我遇到了如何在没有事务的情况下模拟连续编号?,它提出了这个查询:
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) }
}
}
}
我不明白条款union
中的目的where
。where
子句和?中发生了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 的行吗?