将 Select 查询的结果存储在 sql 文件 PSQL 中供稍后使用
Store result of Select query to use later in sql file PSQL
我有 PostgreSQL 数据库。我使用 PSQL 命令 运行 一个 sql 文件:
psql --dbname=postgresql://postgres:password@127.0.0.1:port/dbname < filename.sql
我的 sql 文件如下所示:
delete from records where id = 1;
delete from recordsinfo where recordsinfoid IN (select recordsinfoid from records where id = 1);
但是我有一个外键依赖:
'records' FOREIGN KEY (recordsinfoid) REFERENCES
recordsinfo(recordsinfoid)
所以我不能在第二个删除语句中使用子查询,因为记录会在第一个删除语句中被删除。
我也不能把第二条删除语句放在前面,因为它会导致外键冲突。
如何删除与子查询 'select recordsinfoid from records where id = 1' 对应的 recordsinfo 中的所有条目?
使用临时 table 作为记录缓冲区:
create temp table tmp_records
as
select recordsinfoid from records where id = 1;
delete from records where id = 1;
delete from recordsinfo where recordsinfoid IN (select recordsinfoid from tmp_records);
使用游标从记录中获取recordsinfoid。
通过分隔 ',' 附加 recordsinfoid 来创建一个字符串。
使用创建的字符串进行删除查询,
使用 exec()
执行查询
我正在使用 mssql 。
使用数据修改 CTE:
with d as (
delete from records
where id = 1
returning *
)
delete from recordsinfo
where recordsinfoid in (select recordsinfoid from d);
我使用以下方法解决了它:
DO $$
DECLARE
recordsinfoids INTEGER[];
i INTEGER;
BEGIN
recordsinfoids := ARRAY(select recordsinfoid from records where id = 1);
delete from records where id = 1;
FOREACH i IN ARRAY recordsinfoids
LOOP
delete from recordsinfo where recordsinfoid = i;
END LOOP;
END $$;
基本上预取数组中的值,然后删除
我有 PostgreSQL 数据库。我使用 PSQL 命令 运行 一个 sql 文件:
psql --dbname=postgresql://postgres:password@127.0.0.1:port/dbname < filename.sql
我的 sql 文件如下所示:
delete from records where id = 1;
delete from recordsinfo where recordsinfoid IN (select recordsinfoid from records where id = 1);
但是我有一个外键依赖:
'records' FOREIGN KEY (recordsinfoid) REFERENCES recordsinfo(recordsinfoid)
所以我不能在第二个删除语句中使用子查询,因为记录会在第一个删除语句中被删除。
我也不能把第二条删除语句放在前面,因为它会导致外键冲突。
如何删除与子查询 'select recordsinfoid from records where id = 1' 对应的 recordsinfo 中的所有条目?
使用临时 table 作为记录缓冲区:
create temp table tmp_records
as
select recordsinfoid from records where id = 1;
delete from records where id = 1;
delete from recordsinfo where recordsinfoid IN (select recordsinfoid from tmp_records);
使用游标从记录中获取recordsinfoid。 通过分隔 ',' 附加 recordsinfoid 来创建一个字符串。 使用创建的字符串进行删除查询, 使用 exec()
执行查询我正在使用 mssql 。
使用数据修改 CTE:
with d as (
delete from records
where id = 1
returning *
)
delete from recordsinfo
where recordsinfoid in (select recordsinfoid from d);
我使用以下方法解决了它:
DO $$
DECLARE
recordsinfoids INTEGER[];
i INTEGER;
BEGIN
recordsinfoids := ARRAY(select recordsinfoid from records where id = 1);
delete from records where id = 1;
FOREACH i IN ARRAY recordsinfoids
LOOP
delete from recordsinfo where recordsinfoid = i;
END LOOP;
END $$;
基本上预取数组中的值,然后删除