下面是我使用的表中键的描述屏幕截图:表键
表中的每一行都表示特定客户在特定时间内的购买情况。所以一个典型的行应该是:典型行 (截图)
我需要合并两个客户端数据,这样一个客户端将在每小时的行中将所有的采购值汇总在一起。
在伪代码中,我要执行的是:
对于每一小时(行),将客户端id为“526”的行的“购买金额”添加到所有具有客户端id“518”的行中。
。
首先,我尝试执行此操作,但是由于表中配置了多个键,所以得到了一个错误:
UPDATE purchases set client id = 518 where client id = 526;由于客户端“518”已经有相同时间的行,所以我无法执行上面创建新行的查询。
我该怎么处理呢?
发布于 2018-08-14 21:04:12
您将需要三个查询:如果两个客户都存在具有相同时间值的记录,则需要一个查询来执行和:
update purchase p1
inner join purchase p2 on p2.client_id=528 and p2.date=p1.date
set p1.amount = p1.amount + p2.amount
where p1.client_id=526;第二个用于处理只有一个记录存在的记录(而不是将继续存在的记录):
insert into purchase
(select 526, date, amount
from purchase p1
where p1.client_id=528 and
not exists (select *
from purchase p2
where p2.client_id=526 and
p2.date=p1.date));注意-使用update查询可能也可以完成上面的操作(而且更优雅)。
以及删除合并记录的最后查询:
delete from purchase where client_id=528;注意-我在整个过程中使用了client_id值526和528 -您可能需要修改这些数字以满足您的目的。
https://stackoverflow.com/questions/51849441
复制相似问题