从postgresql中的两个表创建一个SQL查询

时间:2018-02-25 10:30:02

标签: sql postgresql

我有两张表,如图所示。我想在postgresql中创建一个SQL查询,以获得表1中每个唯一'pkey'的pkey和最小count,其中'name1'不在表'name'列中的数组中2。 'name'是一个数组 enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用ANY检查名称数组中是否存在一个元素。

create table t1 (pkey int, cnt int);
create table t2 (pkey int, name text[]);

insert into t1 values (1, 11),(1, 9),(2, 14),(2, 15),(3, 21),(3,16);
insert into t2 values
(1, array['name1','name2']),
(1, array['name3','name2']),
(2, array['name4','name1']),
(2, array['name5','name2']),
(3, array['name2','name3']),
(3, array['name4','name5']);
select pkey
from   t2
where 'name1' = any(name);
| pkey |
| ---: |
|    1 |
|    2 |
select   t1.pkey, min(cnt) count
from     t1
where    not exists (select 1
                     from   t2
                     where  t2.pkey = t1.pkey
                     and    'name1' = any(name))
group by t1.pkey;
pkey | count
---: | ----:
   3 |    16

dbfiddle here