Я хочу найти все "a", у которых "b" = 500 и "b" = 501 и "c" = 2.
В SQL
Я бы сделал это так:
select a from table1 where id in (select info_id from table2 where b = '500')
intersect
select a from table1 where id in (select info_id from table2 where b = '501')
intersect
select a from table1 where id in (select info_id from table2 where id in (select ecu_id from table3 where c = '2'));
Итак, я бы создал три SQL
запроса и затем взял бы пересечение эти 3. Но теперь я должен использовать запросы на основе JPA criteria
, а не нативные SQL
или JPQL
.
Мы могли бы выполнить три отдельных запроса на основе JPA criteria
:
, которые возвращает список «a», где «b» = 500,
, который возвращает список «a», где «b» = 501, и
, который возвращает список «a» "where" c "= 2.
А затем отфильтруйте все« a », которые появляются во всех трех возвращенных списках. Но это заняло бы слишком много времени, наша база данных содержит много миллионов записей "a" ...