簡體   English   中英

將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'外鍵(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM