从两个表中删除行。PostgressSQL

从两个表中删除行。PostgressSQL,sql,postgresql,sql-delete,Sql,Postgresql,Sql Delete,我尝试从两个表中删除行。我正在使用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 "publi

我尝试从两个表中删除行。我正在使用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中删除的行,并在后续逻辑中使用该行。

在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
注意:如果
城市
颜色方案
之间存在关系(如此处所示),您还可以在子表上创建一个外键,该外键使用关于删除级联的
子句引用父表。使用这种技术,当您删除父表中的记录时,数据库会在后台为您处理从属表中的删除。比如:

alter table public.color_schemes 
    add constraint color_schemes_city
    foreign key (city_id)
    references public.cities(id)
    on delete cascade;
考虑:

with del as (delete from public.cities where id = 1)
delete from public.color_schemes where city_id = 1
注意:如果
城市
颜色方案
之间存在关系(如此处所示),您还可以在子表上创建一个外键,该外键使用关于删除级联的
子句引用父表。使用这种技术,当您删除父表中的记录时,数据库会在后台为您处理从属表中的删除。比如:

alter table public.color_schemes 
    add constraint color_schemes_city
    foreign key (city_id)
    references public.cities(id)
    on delete cascade;

为什么不简单地运行两个
DELETE
语句?为什么不简单地运行两个
DELETE
语句?