我有一個 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表中有一些記錄的people_idas null。對于這些地址,他們屬于哪個人,可以通過正則運算式匹配People.unique_identifier到來識別Address.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 || "%")
)
根據我的理解,這是一個低效的查詢,因為它將查看地址表并遞回地為表中的每條記錄運行子查詢。我正在尋找一種有效執行此更新的方法。我使用的 SQLite 版本不支持查詢中的FROM子句UPDATE。
目前,Address表中不存在索引。
uj5u.com熱心網友回復:
如果您計劃升級到支持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 || '%';
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/370841.html
