从两个表中删除行。 PostgressSQL

问题描述 投票:1回答:2

我尝试从两个表中删除行。我使用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
sql postgresql sql-delete
2个回答
0
投票

在Postgres中,您可以使用可更新的CTE:

with c as (
      delete from public.color_schemes 
      where city_id = 1
     )
delete from public.cities
    where id = 1;

您的情况非常简单,因为两个表中都包含城市ID。在大多数复杂情况下,您可以使用returning返回在CTE中删除的行,并将其用于后续逻辑中。


0
投票

考虑:

with del as (delete from public.cities where id = 1)
delete from public.color_schemes where city_id = 1

注意:如果citiescolor_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;
© www.soinside.com 2019 - 2024. All rights reserved.