gpt4 book ai didi

sql - 如果 Postgresql 的父表中不存在外键,则忽略复制(读取)该行

转载 作者:行者123 更新时间:2023-11-29 13:15:58 24 4
gpt4 key购买 nike

CREATE TABLE movies (
tconst varchar(10),
titleType text,
primaryTitle text,
PRIMARY KEY (tconst)
);

CREATE TABLE crew(
tconst varchar(10) PRIMARY KEY,
directors text[],
writers text[],
CONSTRAINT fk_crew_movies FOREIGN KEY (tconst)
REFERENCES movies(tconst)
);

我有两个数据文件,一个用于电影,一个用于剧组,但是当我将数据从剧组数据文件复制到数据库时出现错误

\copy movies from 'movies.tsv';
\copy crew from 'crew.tsv';

insert or update on table "crew" violates foreign key constraint "fk_crew_movies" DETAIL: Key (tconst)=(tt8038822) is not present in table "movies"

这是因为crew中的所有数据都没有电影数据中的id。所以我必须在复制时忽略或删除该特定数据,如果我将数据转储到其他表并使用 delete 语句删除数据

DELETE FROM crew1 WHERE tconst not in (SELECT tconst FROM movies);

它就像永远一样。我还有其他方法可以做到这一点吗?

最佳答案

在实际上只需要删除几行的情况下,以下可能会更好,因为在选择中使用的构造被称为反连接并被查询优化器识别。

DELETE FROM crew1
WHERE tconst IN (
SELECT c.tconst
FROM crew1 c LEFT JOIN movies m ON c.const=m.const
WHERE m.const IS NULL)

没有子选择的 INSERT 版本

 INSERT INTO crew 
SELECT c.* FROM crew1 c
JOIN movies m ON c.const=m.const

关于sql - 如果 Postgresql 的父表中不存在外键,则忽略复制(读取)该行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48961249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com