[英]Count rows that are not in another table
我有以下表格用于管理已将哪个配置文件用于什么服务。
资料表
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”的未使用表中的概要文件数量?
首先,您需要将used
表与service
表连接起来,以访问每个used
记录的service text
。 然后,您需要添加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')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.