我有以下数据:
-------table_a-------
| id | data | value |
| 1 | 5 | 1 |
| 2 | 3 | 3 |
我想要的输出是将第2行与第1行合并,以便在id = 1
的位置,数据保持为=5
但值已添加,因此1+3
。
-------table_a-------
| id | data | value |
| 1 | 5 | 4 |
这是我对查询的看法,但第一个似乎不起作用。这也不是用于检索数据,而是用于操纵数据库中的数据。
当前查询(第一次无法使用):
UPDATE table_a SET value = value + (SELECT a.value FROM table_a a WHERE a.id = 2) WHERE id = 1;
DELETE FROM table_a WHERE id = 2;
答案 0 :(得分:2)
如果这是你想要的逻辑:
UPDATE table_a
SET value = value + (SELECT a.value FROM table_a a WHERE a.id = 2)
WHERE id = 1;
DELETE FROM table_a WHERE id = 2;
update
无效,因为您无法在查询的其余部分引用正在更新的表。您可以使用hack进行更新并执行:
UPDATE table_a
SET value = value + (SELECT value FROM (SELECT a.value FROM table_a a WHERE a.id = 2) )
WHERE id = 1;
双select
解决了这个问题。更正确的方法是使用join
:
UPDATE table_a a CROSS JOIN
(SELECT a.value FROM table_a a WHERE a.id = 2) as a2
SET a.value = a.value + a2.value
WHERE id = 1;
答案 1 :(得分:0)
这是关于如何通过将表连接到自己来创建累积列的一种方法。
我假设Id列是一个标识列, 希望这会有所帮助。
CREATE TABLE [dbo].[TestTable](
[id] [int] NULL,
[data] [int] NULL,
[value] [int] NULL
) ON [PRIMARY]
INSERT INTO [dbo].[TestTable]
([id]
,[data]
,[value])
VALUES
(1,5,1),
(2,3,3),
(3,4,4)
SELECT a.id , a.data , a.value + b.value as Sum
FROM [TestTable] a
left join [TestTable] b
on a.id + 1 = b.id
答案 2 :(得分:0)
这将有效,请检查。
UPDATE table_a,
(SELECT value as val FROM table_a where id = 2) AS t2
SET table_a.value = table_a.value+t2.val
where table_a.id = 1;
DELETE from table_a where id = 2;