I've the following two tables, pod_label & service_selector:
create table pod_label (
name varchar2(256),
key varchar2(256),
value varchar2(256)
);
insert into pod_label (name, key, value)
values ('p1', 'l1', '1');
insert into pod_label (name, key, value)
values ('p1', 'l2', '2');
insert into pod_label (name, key, value)
values ('p1', 'l3', '3');
insert into pod_label (name, key, value)
values ('p2', 'l1', '1');
insert into pod_label (name, key, value)
values ('p3', 'l1', 'N/A');
| NAME | KEY | VALUE |
|---|---|---|
| p1 | l1 | 1 |
| p1 | l2 | 2 |
| p1 | l3 | 3 |
| p2 | l1 | 1 |
| p3 | l1 | N/A |
create table service_selector (
name varchar2(256),
key varchar2(256),
value varchar2(256)
);
insert into service_selector (name, key, value)
values ('s1', 'l1', '1');
insert into service_selector (name, key, value)
values ('s1', 'l2', '2');
| NAME | KEY | VALUE |
|---|---|---|
| s1 | l1 | 1 |
| s1 | l2 | 2 |
I'd like to find name in pod_label such that the corresponding (key, value) pairs are a superset of those of s1 in service_selector. In the above example, p1 is a match, while p2 & p3 are not.
A straight JOIN isn't going to do it. Is there a way w/out resorting to a PL/SQL function?