sqlite - 将几个列值从一个表复制到另一个匹配的 ID - SQLite
问题描述
我正在通过添加一个额外的挑战来详细说明这个问题(将列值从一个表复制到另一个匹配的 ID - SQLite )。
这个想法是当一个 id 匹配时,将几个列的值从一个表复制到另一个表。上述问题解决了如何在找到匹配的 id 时复制一列的内容。这里是@scaisEdge 发布的代码:
UPDATE t1
SET value = (
SELECT value
FROM t2
WHERE t1.ID = t2.ID)
但是,如果我们想从 t1.ID = t2.ID 的同一行更新几列呢?当然,对于要更新的每一列,可以运行几次,但是,这非常低效,因为我必须更新数百万行。我猜查询必须执行的逻辑比较越少,它就会越快。欢迎任何其他优化此任务的方法,ID 是唯一的,两个表具有相同的行数,并且在两个表中都可以找到完全相同的 ID 值。因此,对表格进行排序并非不可能。
解决方案
如果您的 SQLite 版本是 3.15.0+,您可以使用Row Values来做到这一点:
update t1 set
(col1, col2) = (
select col1, col2
from t2
where t2.id = t1.id
)
请参阅演示。
推荐阅读
- python - 在另一个线程中显示图像或视频
- spring - 无法使用 Java Spring Boot 将对象保存到 MySQL DB
- c# - 在 Visual Studio 中添加对 C++ 项目的新 DLL 引用
- c - 如果 sizeof(int) == sizeof(long),那么 INT_MIN == LONG_MIN && INT_MAX == LONG_MAX 是否总是正确的?
- c++ - 无法从 QT 中的 tableWidget 获取项目
- javascript - 无法读取 null 的属性(读取“getContext”)
- python - 你如何与熊猫进行分组,它对同一列中的值求和但被一组行数偏移
- rtsp - ONVIF:列出同一网络中 IP 摄像机的所有主机名
- java - 在 Android 中使用 api 将图像上传到 Imgur 时出错
- xml - 如何使用 XSLT 从 XML 中删除元素标记