在 SQLITE 中更新多行
UPDATE multiple row in 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
returns
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
)
将按照您的预期工作并更新设备 table 中的所有记录。
我正在使用 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
returns
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
)
将按照您的预期工作并更新设备 table 中的所有记录。