在 SQLite 数据库上更新一对多关系 table 的有效方法

Efficient way to update one-to-many relationship table on an SQLite database

我有一个包含两个 table 的 SQLite 数据库,一对多关系如下:

People
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`name` VARCHAR(200) NOT NULL,
`unique_identifier` VARCHAR(200)

Address
`id` VARCHAR(20) PRIMARY KEY AUTOINCREMENT,
`people_id` INTEGER,
`includes_unique_indentifier` VARCHAR(256),
`name` VARCHAR(200) NOT NULL,
FOREIGN KEY(people_id) REFERENCES People(id)

Address table 中有一些记录的 people_idnull。对于这些地址,他们属于哪个人,可以通过正则表达式匹配 People.unique_identifierAddress.includes_unique_identifier.

来识别

忽略数据冗余,我想更新每个 Address.name 以匹配其对应的 People.name 记录。

目前我的查询如下所示:

UPDATE address
SET name = (
  SELECT notes
  FROM people
  WHERE address.people_id = id OR address.includes_unique_indentifier LIKE ("%" || unique_identifier || "%")
)

根据我的理解,这是一个低效的查询,因为它将查看地址 table 并递归 运行 table 中每条记录的子查询。我正在寻找一种有效执行此更新的方法。我使用的 SQLite 版本不支持 UPDATE 查询中的 FROM 子句。

目前 Address table 上没有索引。

如果您计划升级到支持 UPDATE ... FROM ... 语法的版本 (3.30.0+),您可以使用此模拟表连接的查询:

UPDATE address AS a
SET name = p.name
FROM people AS p
WHERE p.id = a.people_id OR a.includes_unique_indentifier LIKE '%' || p.unique_identifier || '%';