【发布时间】:2014-11-01 22:29:27
【问题描述】:
我有 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)
LICENSE 中的 CREATED_AT 是一个 DATE(非空)字段。
表根据同名的主键/外键关联;一个客户可以拥有 0 个或多个许可证,每个许可证都有一个版本。
我想从这些表中获取:
客户的名字、姓氏和最后一个创建的许可证的 release_id(根据 LICENSE 中的 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 和最后一个许可证的客户数量(根据 LICENSES 中的 CREATED_AT)有这个版本。
我无法创建此查询。 我正在使用 h2 数据库。
感谢您的帮助
【问题讨论】: