【发布时间】:2022-01-18 23:40:15
【问题描述】:
假设我有软件包并且这些软件包有版本。每个版本都有自己的许可证。
create table my_package (
id serial primary key,
name text
);
insert into my_package (name) values
('a'),
('b'),
('c'),
('d');
create table my_version (
my_package_id int references my_package,
version text,
license text
);
insert into my_version (my_package_id, version, license) values
(1, '1.0.0', 'mit'),
(1, '2.0.0', 'isc'),
(1, '3.0.0', 'bsd'),
(2, '1.0.0', 'foo'),
(2, '2.0.0', 'bar'),
(2, '3.0.0', 'baz'),
(3, '1.0.0', 'aaa'),
(3, '2.0.0', 'bbb'),
(3, '3.0.0', 'ccc'),
(4, '1.0.0', 'ggg'),
(4, '2.0.0', 'qqq');
我的问题是找到我拥有版本和名称的软件包的许可证,例如a: 2.0.0 和 b: 1.0.0。
这是我目前正在做的事情。
select
my_package.name,
my_version.version,
my_version.license
from
unnest(ARRAY['a', 'b'], array['2.0.0', '1.0.0']) as t(name, version)
join my_package on t.name = my_package.name
join my_version on my_package.id = my_version.my_package_id and t.version = my_version.version;
返回我期望的结果。
|name|version|license|
|----|-------|-------|
|a |2.0.0 |isc |
|b |1.0.0 |foo |
我想知道是否有一种更简单的方法,而不使用unnest,最好是在from 子句中使用子查询。我的目标是找到一个可以使用 JPA 的查询。
有什么想法吗?非常感谢!
【问题讨论】:
标签: sql postgresql jpa jpql