我遇到一个错误导致数据库表同时在ID列中混合了电子邮件和GUID的问题。
表格如下(简化):
GUID | Value | Date
cf@a | 21 | 2016
mf@b | 42 | 2015
mf@b | 21 | 2016
1aXd | 3 | 2016
a7vf | 9 | 2015
例如,用户cf @ a和用户1aXd是相同的。 GUID - 电子邮件组合存储在另一个表中。电子邮件是独一无二的。主键是ID(GUID)和日期组合。我的问题是,我如何更新表并合并行?两个合并行的Value列应该相加。
所以示例表假设(cf @ a - > 1aXd和mf @ b - > 8bga和ui @ q - > a7vf)将成为:
GUID | Value | Date
1aXd | 24 | 2016 <-- merged, Value = 21+3
8bga | 42 | 2015 <-- converted to GUID
8bga | 21 | 2016 <-- converted to GUID
<-- one row removed (merged with the first one)
a7vf | 9 | 2015 <-- untouched
感谢您的帮助!
我可以在C#中做到这一点,但我宁愿学习如何使用MySQL Workbench
答案 0 :(得分:1)
使用JOIN
:
SELECT t1.Value + t2.Value
FROM t1
JOIN t2 USING (`GUID`)
如果你想要更新值,你需要这样的东西:
UPDATE t1
JOIN t2 USING (`GUID`)
SET t1.Value = t1.Value + t2.Value
删除合并行:
DELETE t2 FROM t2
JOIN t1 USING (`GUID`)
<强>更新强>
如果只有一张桌子。
合并:
UPDATE t1
JOIN (
SELECT GUID, SUM(Value) as amount, COUNT(1) as cnt
FROM t1
GROUP BY `GUID`
HAVING cnt > 1
) t2 ON t2.GUID = t1.GUID
SET t1.Value = t2.amount;
删除:
CREATE table t2 (
GUID integer,
Value integer,
Date integer
);
INSERT INTO t2 (GUID, Value, Date)
SELECT GUID, Value, MAX(Date) FROM t1 GUID, Value;
结果将在t2。