一对多查询元组

时间:2014-12-05 10:57:37

标签: sql jpa

我有一个与Entity2有一对多关系的Entity1。 Entity2存储属性并具有“key”和“value”字段。

现在我需要查询具有某些键/值组合(AND逻辑)

的所有Entity1
SELECT e1 FROM Entity1 e Join e.props e2 
WHERE 
e2.key = :key1 and e2.value = :value1
And
e2.key = :key2 and e2.value = :value2 -- wont work

4 个答案:

答案 0 :(得分:1)

一种容易推广到更多键/值对的方法是使用条件聚合:

SELECT entity_id
FROM e.props
GROUP BY entity_id
HAVING SUM(CASE WHEN e2.key = :key1 and e2.value = :value1 THEN 1 ELSE 0 END) > 0 AND
       SUM(CASE WHEN e2.key = :key2 and e2.value = :value2 THEN 1 ELSE 0 END) > 0;

对于更多条件,您只需向having添加更多子句。

答案 1 :(得分:1)

JPA了解EXISTS:

SELECT e1 FROM Entity1 e1 
WHERE exists (select 1 from Entity2 e2 
              where e2.entity1.id = e1.id
                and e2.key = :key1 and e2.value = :value1)
  AND exists (select 1 from Entity2 e2 
              where e2.entity1.id = e1.id
                and e2.key = :key2 and e2.value = :value2);

答案 2 :(得分:0)

select e1.* 
from entity1 e1
join entity2 e21 on e21.e1_id = e1.id and e21.key = :key1 and e21.value = :value1
join entity2 e22 on e22.e1_id = e1.id and e22.key = :key2 and e22.value = :value2

答案 3 :(得分:0)

使用此

SELECT some_filed FROM Entity1 AS e1 Join e1.props AS p 
WHERE 
(p.key = :key1 and p.value = :value1)
and
(p.key = :key2 and p.value = :value2);