在表中组合2行

时间:2015-01-25 06:10:07

标签: mysql sql merge

我有以下数据:

-------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;

3 个答案:

答案 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;