SQL在另一个表中不存在,但计数大于另一个表中的3

时间:2019-03-23 17:13:38

标签: sql postgresql

我有以下表格,其中包含个人资料和每个个人资料的照片列表(在photo表中)。我也有一个service表和一个used表,我想要一个查询,该查询返回的个人资料ID不属于所使用的服务,并且在{{1}中也包含3张以上的照片}表

photo

profile

CREATE TABLE public.profile ( id integer NOT NULL DEFAULT nextval('profile_id_seq'::regclass), name text COLLATE pg_catalog."default" NOT NULL, birthday timestamp with time zone NOT NULL, CONSTRAINT profile_id PRIMARY KEY (id) )

photo

CREATE TABLE public.photo ( id integer NOT NULL DEFAULT nextval('photo_id_seq'::regclass), image bytea NOT NULL, image_id text COLLATE pg_catalog."default" NOT NULL, order_count smallint NOT NULL, profile_id bigint NOT NULL, CONSTRAINT photo_id PRIMARY KEY (id), CONSTRAINT photo_profile_id_fkey FOREIGN KEY (profile_id) REFERENCES public.profile (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE )

service

CREATE TABLE public.service ( id integer NOT NULL DEFAULT nextval('service_id_seq'::regclass), name text COLLATE pg_catalog."default" NOT NULL, CONSTRAINT service_id PRIMARY KEY (id) )

used

2 个答案:

答案 0 :(得分:2)

使用存在,不存在

     select p.* from profile p
     where exists ( select 1 from photo ph where ph.profile_id =p.id
                                           having count (distinct image_id )=3
                   )
    and not exists ( select 1 from used u where u.profile_id =p.id)

答案 1 :(得分:1)

我会去

s = "You love Python!"

s1=[]
s2=[]
for c in s:
    if c in "aeiou":
        s1.append(c)
    else:
        s2.append(c)

s3 = ''.join(s1+s2)
print(s1)
print(s2)
print(s3)

如果仅需要select p.profile_id from photo p where not exists (select 1 from used u where u.profile_id = p.profile_id ) group by p.profile_id having count(*) >= 3; ,则不需要profile_id表。