Mysql 如何编写Sparql查询来检查重复项而不使用GROUP BY?

Mysql 如何编写Sparql查询来检查重复项而不使用GROUP BY?,mysql,sparql,ontology,Mysql,Sparql,Ontology,我有一个相当复杂的Sparql查询,我不知道如何编写。以下是本体的简化背景: “水果”类有子类“苹果”和“芒果”。另一类“营养”有“维生素”和“纤维”两个子类。“水果有营养”是一个具有领域“水果”和范围“营养”的属性 然后我创建了以下实例: 苹果1号、芒果1号、维生素1号、维生素2号、纤维1号和纤维2号、纤维3号 以下是Apple_1和Mango_1的外观: fruit:Apple_1 rdf:type fruit:Apple ; fruit:fruit_has_nutrition

我有一个相当复杂的Sparql查询,我不知道如何编写。以下是本体的简化背景:

“水果”类有子类“苹果”和“芒果”。另一类“营养”有“维生素”和“纤维”两个子类。“水果有营养”是一个具有领域“水果”和范围“营养”的属性

然后我创建了以下实例:

苹果1号、芒果1号、维生素1号、维生素2号、纤维1号和纤维2号、纤维3号

以下是Apple_1和Mango_1的外观:

fruit:Apple_1
   rdf:type fruit:Apple ;
   fruit:fruit_has_nutrition fruit:Fiber_1 ;
   fruit:fruit_has_nutrition fruit:Fiber_2 ;
   fruit:fruit_has_nutrition fruit:Vitamin_1 ;
   rdfs:label "Apple 1" ;.

fruit:Mango_1
   rdf:type fruit:Mango ;
   fruit:fruit_has_nutrition fruit:Fiber_3 ;
   fruit:fruit_has_nutrition fruit:Vitamin_2 ;
   rdfs:label "Mango 1" ;.
假设一个水果实例可以包含尽可能多的营养成分,但对于每一种,它应该只包含该营养成分的一个实例。如果是这样的话,Apple_1违反了这一假设,因为它有两个光纤实例

因此,我想写的问题是“给我所有具有多种相同营养成分的水果,并告诉我这些营养成分的类型”。有了上面的数据,它应该会还给我苹果1号和光纤

挑战之处在于,我不能仅仅按照rdf:type进行分组,因为它失去了对水果种类的区分。我尝试了减号(所有水果-没有违规的水果):

但最终我什么也没得到

有没有办法用两个变量来分组?我还可以如何编写此查询


非常感谢你

在不尝试所需语法的情况下,这是在SQL中解决该问题的一种方法

select *
from fruits f
inner join (
      select fruit,nutrition 
      from fruits
      group by fruit,nutrition 
      having count(*) > 1
      ) dups on f.fruit = dups.friuits and f.nutrition = dups.nutrition 

在不尝试所需语法的情况下,这是在SQL中解决此问题的一种方法

select *
from fruits f
inner join (
      select fruit,nutrition 
      from fruits
      group by fruit,nutrition 
      having count(*) > 1
      ) dups on f.fruit = dups.friuits and f.nutrition = dups.nutrition 

也许我不明白这个问题,但为什么你不能按fuit类型分组呢

通常,没有可用于测试的最小样本数据,因此,未测试的查询可能是错误的:

选择水果?水果类型{
?水果:水果有营养?营养。
?营养rdf:类型?水果型。
}
按水果类型分组
具有(计数(?营养)>1)

也许我不理解这个问题,但为什么不能按fuit类型分组呢

通常,没有可用于测试的最小样本数据,因此,未测试的查询可能是错误的:

选择水果?水果类型{
?水果:水果有营养?营养。
?营养rdf:类型?水果型。
}
按水果类型分组
具有(计数(?营养)>1)

Mmmm;你需要一个2的聚合值,但由于我不熟悉这个语法,我能提供的只是一个SQL方法,如果它是无用的,我将删除它作为一个答案;你需要一个2的聚合值,但由于我不熟悉这个语法,我能提供的只是一个SQL方法,如果它是无用的,我将删除它作为一个答案。非常感谢!!它起作用了!谢谢!我想我以前遇到过一些括号问题!非常抱歉!没问题。如果答案是正确的,不要忘记“接受”这个答案。你的问题现在解决了吗?你对这个答案还有疑问吗?若要接受答案“”,请参阅“是”,问题已解决!非常感谢大家!非常感谢你!!它起作用了!谢谢!我想我以前遇到过一些括号问题!非常抱歉!没问题。如果答案是正确的,不要忘记“接受”这个答案。你的问题现在解决了吗?你对这个答案还有疑问吗?若要接受答案“”,请参阅“是”,问题已解决!非常感谢大家!