如何解决如果匹配条件,则插入行或更新行有重复的术语,不是唯一的
注意:不能使用 ON CONFLICT,字段不是唯一的:serie_name 和 season 重复多次。
我需要更新系列剧中一季的集数。我有一个有3000行的表,我需要一一检查,如果记录不存在,我会插入一个新行,如果已经存在,更新该行。 我有这个示例表:
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "series_test" (
"id_key" INTEGER NOT NULL,"serie_name" VARCHAR(100) NOT NULL,"season" INTEGER,"episode_dub" INTEGER,"episode_leg" INTEGER
);
INSERT INTO "series_test" VALUES ('id_key','serie_name','season','episode_dub','episode_leg');
INSERT INTO "series_test" VALUES (2,'1 Contra Todos',1,8,0);
INSERT INTO "series_test" VALUES (2,2,3,4,0);
INSERT INTO "series_test" VALUES (175,'Band Of brothers',10,10);
INSERT INTO "series_test" VALUES (175,4);
INSERT INTO "series_test" VALUES (175,13);
COMMIT;
我需要插入一行,但如果字段数据已存在于“serie_name”和字段“season”中,则该命令只会更新记录。 如果条件不存在,插入...否则更新数据
逻辑如下:
IF EXISTS (SELECT * FROM series_test WHERE serie_name='Band Of brothers' AND season=3)
UPDATE series_test SET episode_dub=5 AND episode_leg=15 WHERE serie_name='Band Of brothers' AND season=3
ELSE
INSERT INTO series_test (serie_name,season,episode_dub,episode_leg) VALUES ('Band Of brothers',5,15)
最优化的方法是什么?
补充:
如果只使用 sql,我不知道这样做的最佳方法是什么。或者使用python + sql。
我通过 python 进行网络抓取,以获取该系列每一季的最新剧集数据。我需要输入这些数据或更新它。
更新旧数据,增加一季集数
{'id_key': 175,'serie_name': 'Band Of brothers','season': 3,'episode_dub': 5,'episode_leg': 15}
插入新一季的剧集:
{'id_key': 175,'season': 4,' episode_dub': 1,'episode_leg': 3}
解决方法
您可以为列 UNIQUE
和 serie_name
定义复合 season
约束:
CREATE TABLE IF NOT EXISTS series_test (
id_key INTEGER NOT NULL,serie_name VARCHAR(100) NOT NULL,season INTEGER,episode_dub INTEGER,episode_leg INTEGER,UNIQUE(serie_name,season)
);
现在您可以使用 ON CONFLICT
:
INSERT INTO series_test (id_key,serie_name,season,episode_dub,episode_leg) VALUES
(175,'Band Of Brothers',3,5,15)
ON CONFLICT(serie_name,season) DO UPDATE
SET episode_dub = EXCLUDED.episode_dub,episode_leg = EXCLUDED.episode_leg
请注意,您还必须为列 id_key
提供一个值,因为它被定义为 NOT NULL
。
参见demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。