You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite如何通过三张关联表实现UPDATE操作?

解决SQLite三表关联更新Plex元数据日期问题

我的Plex服务器元数据日期存在错误,需要将metadata_items.added_at字段的值替换为关联的media_parts.created_at字段的值,这两个表需通过media_items表建立关联。

关联表结构

media_parts
id
media_items
id
metadata_items
id

可正常执行的关联查询(验证数据对应关系)

SELECT
    media_parts.created_at AS media_created_at,
    metadata_items.added_at AS metadata_added_at
FROM media_parts
INNER JOIN media_items
ON media_parts.media_item_id = media_items.id
INNER JOIN metadata_items
ON media_items.metadata_item_id = metadata_items.id

错误的更新尝试

之前尝试的UPDATE语句因子查询未关联当前行导致报错:

UPDATE metadata_items
SET added_at = (
    SELECT
        media_parts.created_at
    FROM media_parts
    INNER JOIN media_items
    ON media_parts.media_item_id = media_items.id
    INNER JOIN metadata_items
    ON media_items.metadata_item_id = metadata_items.id
)

正确的三表关联更新语句

在SQLite中,可通过带关联条件的子查询实现三表关联更新,确保子查询只返回当前行对应的created_at值:

UPDATE metadata_items
SET added_at = (
    SELECT mp.created_at
    FROM media_parts mp
    JOIN media_items mi ON mp.media_item_id = mi.id
    WHERE mi.metadata_item_id = metadata_items.id
)
-- 可选:仅更新存在对应关联数据的行,避免无关联行被设为NULL
WHERE EXISTS (
    SELECT 1
    FROM media_parts mp
    JOIN media_items mi ON mp.media_item_id = mi.id
    WHERE mi.metadata_item_id = metadata_items.id
);

复现问题的SQL Dump

CREATE TABLE media_parts(
   id            INTEGER  NOT NULL PRIMARY KEY 
  ,media_item_id INTEGER  NOT NULL
  ,created_at    VARCHAR(19) NOT NULL
);
INSERT INTO media_parts(id,media_item_id,created_at) VALUES (33,33,'2016-05-13 19:59:06');
INSERT INTO media_parts(id,media_item_id,created_at) VALUES (44,44,'2015-10-12 02:15:21');
INSERT INTO media_parts(id,media_item_id,created_at) VALUES (72,72,'2016-01-01 02:13:58');
INSERT INTO media_parts(id,media_item_id,created_at) VALUES (118,118,'2016-03-05 19:57:32');

CREATE TABLE media_items(
   id               INTEGER  NOT NULL PRIMARY KEY 
  ,metadata_item_id INTEGER  NOT NULL
);
INSERT INTO media_items(id,metadata_item_id) VALUES (33,34);
INSERT INTO media_items(id,metadata_item_id) VALUES (44,45);
INSERT INTO media_items(id,metadata_item_id) VALUES (72,73);
INSERT INTO media_items(id,metadata_item_id) VALUES (118,117);

CREATE TABLE metadata_items(
   id       INTEGER  NOT NULL PRIMARY KEY 
  ,added_at VARCHAR(19) NOT NULL
);
INSERT INTO metadata_items(id,added_at) VALUES (34,'2019-05-13 20:00:54');
INSERT INTO metadata_items(id,added_at) VALUES (45,'2018-10-12 02:19:14');
INSERT INTO metadata_items(id,added_at) VALUES (73,'2019-01-01 02:42:43');
INSERT INTO metadata_items(id,added_at) VALUES (117,'2019-03-07 20:58:50');

内容的提问来源于stack exchange,提问作者oats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:46:14