如何解决在 SQLITE 中更新多行
我正在使用 SQLite,我正在尝试使用 select 语句更新多行。
我有两张桌子:
设备:
ID|Name|param1|param2
----------------------
1 | D1 | p1 | p2
2 | D2 | p1 | p3
3 | D3 | p1 | p4
devices_in_groups
ID|ID_group|ID_device|
----------------------
1 | 0 | 1 |
2 | 0 | 2 |
3 | 1 | 3 |
我想更新组 0 中所有设备的所有 param1 属性。
我尝试类似:
UPDATE device SET param1 = p10
WHERE device.ID = (
SELECT ID_device
FROM devices_in_groups
WHERE devices_in_groups.ID_group = 0)
它只更新第一个设备 (D1) 而不是第二个 (D2) 与组 0 中的两者不同。
我该怎么做(在 SQLite 中)?
解决方法
使用运算符 IN
:
UPDATE device
SET param1 = 'p10'
WHERE ID IN (
SELECT ID_device
FROM devices_in_groups
WHERE ID_group = 0
);
参见demo。
如果您的 SQLite 版本是 3.33.0+,您也可以使用 UPDATE...FROM
:
UPDATE device AS d
SET param1 = 'p10'
FROM devices_in_groups AS g
WHERE d.ID = g.ID_device AND g.ID_group = 0;
参见demo。
即使你的子查询
SELECT ID_device
FROM devices_in_groups
WHERE devices_in_groups.ID_group = 0
返回
ID_device
1
2
主查询需要使用IN而不是=
= 表示您正在将 device.ID 值与查询结果(行)进行比较
此外,p10 也需要表示为字符串,否则会报错,因为没有列 p10。
因此将查询更改为
UPDATE device SET param1 = 'p10'
WHERE device.ID IN (
SELECT ID_device
FROM devices_in_groups
WHERE devices_in_groups.ID_group = 0
)
将按照您的预期工作并更新设备表中的所有记录。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。