假設我有軟體包并且這些軟體包有版本。每個版本都有自己的許可證。
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 的查詢。
有任何想法嗎?非常感謝你!
uj5u.com熱心網友回復:
您可以通過將一組列括在括號中來一起查詢一組列:
select
my_package.name,
my_version.version,
my_version.license
from my_package p
join my_version v on p.id = v.my_package_id
WHERE
(p.name,v.version) in (('a','2.0.0'),('b','1.0.0'));
uj5u.com熱心網友回復:
我的問題是找到包含版本和名稱的軟體包的許可證,例如 a: 2.0.0 和 b: 1.0.0。
我想知道為什么你不只是查詢where子句中的那些值并寫下這個回復......并且只是注意到對 JPA 的參考,這是一個我不熟悉的包。在這種情況下,也許這沒有幫助,但我想無論如何我都會發布它。
select
my_package.name,
my_version.version,
my_version.license
FROM my_package
INNNER JOIN my_version on my_package.id = my_version.my_package_id
WHERE my_package.name = 'a' AND my_version.version = '2.0.0'
OR my_package.name = 'b' AND my_version.version = '1.0.0'
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/383305.html
標籤:sql PostgreSQL的 jpa jpql
下一篇:選擇distinct很慢
