从两个表中删除行。PostgressSQL
我尝试从两个表中删除行。我正在使用postgresql从两个表中删除行。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
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
语句?