![](/img/trans.png)
[英]How to store SQL query result into variable to include in a later SELECT statement
[英]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'外鍵(recordsinfoid)參考recordsinfo(recordsinfoid)
所以我不能在第二個delete語句中有子查詢,因為記錄將在第一個delete語句中被刪除。
另外,我不能將第二條刪除語句放在第一位,因為它會導致外鍵沖突。
如何刪除recordsinfo中與子查詢“從id = 1的記錄中選擇recordsinfoid”相對應的所有條目?
使用臨時表作為記錄緩沖區:
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);
使用修改數據的CTE:
with d as (
delete from records
where id = 1
returning *
)
delete from recordsinfo
where recordsinfoid in (select recordsinfoid from d);
使用光標從記錄中獲取recordsinfoid。 通過用','分隔附加recordsinfoid來創建字符串。 使用創建的字符串進行刪除查詢,使用exec()執行查詢
我正在使用mssql。
我使用以下方法解決了問題:
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 $$;
基本上預取數組中的值,然后再刪除
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.