我尝试从两个表中删除行。我使用postgresql。
DELETE public.cities, public.color_schemes
FROM public.cities
INNER JOIN public.color_schemes ON public.color_schemes.city_id = public.cities.id
WHERE public.cities.id = 1;
我得到一个错误
ERROR: syntax error at or near "public"
LINE 1: public.
^
SQL state: 42601
Character: 1
在Postgres中,您可以使用可更新的CTE:
with c as (
delete from public.color_schemes
where city_id = 1
)
delete from public.cities
where id = 1;
您的情况非常简单,因为两个表中都包含城市ID。在大多数复杂情况下,您可以使用returning
返回在CTE中删除的行,并将其用于后续逻辑中。
考虑:
with del as (delete from public.cities where id = 1)
delete from public.color_schemes where city_id = 1
注意:如果cities
和color_schemes
之间存在关系(如此处所示),则也可以在子表上创建一个外键,该子表使用on delete cascade
子句引用父表。使用这种技术,当您删除父表中的记录时,数据库将在后台为您处理从属表中的删除。类似于:
alter table public.color_schemes
add constraint color_schemes_city
foreign key (city_id)
references public.cities(id)
on delete cascade;