我有下表用于管理将哪个配置文件用于什么服务。
个人资料表
CREATE TABLE public.profile
(
id integer NOT NULL DEFAULT nextval('profile_id_seq'::regclass),
name text COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT profile_id PRIMARY KEY (id)
)
服务表
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)
)
二手表
CREATE TABLE public.used
(
id integer NOT NULL DEFAULT nextval('used_id_seq'::regclass),
service_id bigint NOT NULL,
profile_id bigint NOT NULL,
insert_timestamp timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT used_id PRIMARY KEY (id),
CONSTRAINT used_profile_id_fkey FOREIGN KEY (profile_id)
REFERENCES public.profile (id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE,
CONSTRAINT used_service_id_fkey FOREIGN KEY (service_id)
REFERENCES public.service (id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE
)
我正在尝试创建一个SQL查询,该查询将计算profile_id不在特定服务的used
表中的总配置文件。假设我们的服务称为“ gym”,如何计算服务名称为“ gym”的未使用表中的概要文件数量?
答案 0 :(得分:1)
首先,您需要将used
表与service
表联接以访问每个service text
记录的used
。然后,您需要添加service text
等于gym
的条件,最后使用not in
条件,可以选择所提供的子查询中不存在的配置文件的数量。>
select count(*) from public.profile
where id not in
(select u.profile_id from public.used u inner join public.service s
on s.id = u.service_id
where s.text = 'gym')