Как сделать запрос? (sql / jpql) - PullRequest
0 голосов
/ 28 июня 2018

Мне нужно создать запрос, но он сложный (по крайней мере, я).

У меня есть Продукты, хранящиеся в БД, каждый из которых принадлежит Фабрике.
Каждая фабрика может одновременно работать только с одним собственным продуктом.
Каждый продукт, имеющий номер, представляет его заказ в очереди Фабрики.
У каждого товара есть поле «число», если его фабрика начала работать с ним, или ноль, если товар находится в очереди.

Запрос должен возвращать список Продуктов с первым Продуктом в очереди каждой Фабрики, но только если Фабрика в настоящее время не работает с каким-либо продуктом.

См. Следующий пример:

Дано:

Id          FactoryId   Working     Order
Product1    Factory1    4654        1

Product2    Factory2    9841        3
Product3    Factory2    NULL        6

Product4    Factory3    NULL        4
Product5    Factory3    NULL        7

Product6    Factory4    NULL        2
Product7    Factory4    3211        9

product8    Factory5    NULL        10
product9    Factory5    NULL        5
product10   Factory5    NULL        13

Результат:

Id          FactoryId   Working     Order
Product4    Factory3    NULL        4
product9    Factory5    NULL        5

Я использую Spring Data JpaRepository.

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете использовать NOT EXISTS с коррелированным подзапросом:

select t.*
from table t
where not exists (select 1 
                  from table t1 
                  where t1.FactoryId = t.FactoryId and 
                        t1.working is not null) and
       Order = (select min(t1.order) 
                from table t1 
                where t1.FactoryId = t.FactoryId
               );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...