我的实体具有多个属性,具有以下简化模式:
实体:
属性:
entity_attribute:
如果我想要检索具有名为“male”属性的记录,我可以写:
SELECT * FROM Entity
INNER JOIN entity_attribute ON ...
INNER JOIN Attribute ON ...
WHERE Attribute.name = 'male'
如果我想检索具有名为“male”或“teacher”属性的记录,我可以写:
SELECT * FROM Entity
INNER JOIN entity_attribute ON ...
INNER JOIN Attribute ON ...
WHERE Attribute.name = 'male' OR Attribute.name = 'teacher'
如果我想检索具有名为“male”的属性并且具有名为“teacher”的属性的记录,我可以写:
SELECT *, COUNT(*) AS cnt FROM Entity
INNER JOIN entity_attribute ON ...
INNER JOIN Attribute ON ...
WHERE Attribute.name = 'male' OR Attribute.name = 'teacher'
HAVING cnt = 2
现在是棘手的部分。我的查询需要在manytomany查询中包含and
和or
。
那些[(具有属性'male')和(具有属性'teacher'或具有属性'gardener')和(具有属性'likes_apple'或具有属性'likes_orange'或具有'的那些实体)属性'likes_cherry')]。
使用子查询可能是一个解决方案,但据我所知,这将是缓慢的(~10000个实体,~30个属性,~15000个entity_attributes)。什么是快速解决方案?
答案 0 :(得分:0)
你可以做3个查询和联合,这将是最快(最简单)的方式
如果你想要一个快速的方法...使用存在的子查询,存在的想法是它在匹配的第一个项目上返回true ...所以你会避免这种方式内部连接和多个地方分句