У меня 3 стола
CUSTOMERS (CUSTOMER_ID, LASTNAME, FIRSTNAME, ... other fields)
LICENSES(LICENSE_ID, CREATED_AT, RELEASE_ID, CUSTOMER_ID, ... other fields)
RELEASES(RELEASE_ID, RELEASE_NAME, RELEASE_NUMBER, ... other fields)
CREATED_AT в ЛИЦЕНЗИИ - это поле DATE (NOT NULL).
таблицы связаны по первичному ключу / внешнему ключу с тем же именем; у клиента может быть 0 или более лицензий, и у каждой лицензии есть выпуск.
Я бы хотел получить из этих таблиц:
имя, фамилия и идентификатор выпуска последней созданной лицензии клиента (согласно полю CREATED_AT в ЛИЦЕНЗИИ, чтобы найти последнюю), если таковая имеется.
для этого я использовал этот запрос:
SELECT CUSTOMERS.FIRSTNAME,
CUSTOMERS.LASTNAME,
(SELECT RELEASES.RELEASE_ID
FROM RELEASES
INNER JOIN LICENSES ON LICENSES.RELEASE_ID = RELEASES.RELEASE_ID
INNER JOIN CUSTOMERS AS t ON t.CUSTOMER_ID = LICENSES.CUSTOMER_ID
WHERE t.CUSTOMER_ID = CUSTOMERS.CUSTOMER_ID
ORDER BY LICENSES.CREATED_AT DESC LIMIT 1) AS REL_ID
FROM CUSTOMERS
WHERE EXISTS
(SELECT 1
FROM RELEASES
INNER JOIN LICENSES ON LICENSES.RELEASE_ID = RELEASES.RELEASE_ID
INNER JOIN CUSTOMERS AS t ON LICENSES.CUSTOMER_ID = t.CUSTOMER_ID
AND t.CUSTOMER_ID = CUSTOMERS.CUSTOMER_ID)
Кажется, это работает, но я спрашиваю, может ли кто-нибудь подтвердить мне это или можно сделать это проще.
Другие данные, которые я хочу получить из этих таблиц, - это RELEASES.RELEASE_ID, RELEASES.RELEASE_NAME, RELEASES.RELEASE_NUMBER
и количество клиентов, у которых последняя лицензия (согласно CREATED_AT в LICENSES) имеет этот выпуск.
Мне не удалось создать этот запрос. Я использую базу данных h2.
Спасибо за помощь