【发布时间】:2021-09-24 08:19:44
【问题描述】:
我的 MySQL 知识有点不稳定。我有一个包含(除其他外)以下列/值的表:
ID | importID | distID | email | street | city
-----------------------------------------------------------
25 | 5 | 2 | abc@d.com | Main Road | London
-----------------------------------------------------------
26 | 5 | 2 | mno@e.com | Oak Alley | York
-----------------------------------------------------------
27 | 5 | 2 | pqr@s.com | Tar Pits | London
-----------------------------------------------------------
28 | 5 | 2 | xyz@a.com | Fleet Street | London
-----------------------------------------------------------
...
-----------------------------------------------------------
99 | -1 | 2 | abc@d.com | New Street | Exeter
在插入新行时我会进行一些检查:验证电子邮件地址,查找具有不同 dist(ributor)ID 的双拼等。
其中一项任务是“当“电子邮件”列相同时,使用新导入行的数据更新现有行”(是的,可以有多个具有相同电子邮件地址的行)。
在执行此任务时,当前插入的行的 importID 始终为 -1。我尝试了各种变体的别名
UPDATE table orig table dup
SET orig.street = dup.street, orig.city = dup.city
WHERE orig.email = dup.email
或加入多种变体
UPDATE table orig
JOIN
(SELECT email FROM table
WHERE importID != -1) dup
ON orig.email = dup.email
SET orig.street = dup.street, orig.city = dup.city
我的错误是什么?
【问题讨论】:
-
我不同意这种方法。您应该避免像这样存储重复信息,或者,如果必须,则使用时间戳来区分当前信息和旧信息。
-
我明白你的意思。这种方法背后的要点是我有一个包含所有数据的大表。记录可以来自不同的进口,属于不同的分销商等等。我可以使用 importID 区分现有行和新行 - 但是当从 csv 文件导入记录时,尚未创建该导入记录。这就是为什么新的导入会得到 -1,稍后会更改为正确的导入 ID。我可以改变它,但这意味着相当多的工作和时间——我目前没有……:(
-
如果可以,请将示例表数据添加到您的问题中。
-
添加了示例数据并更改了应更新的字段名称,因为地址更改而不是名称更改的可能性更大;)
-
那么您的问题到底是什么?用 import id = -1 的记录更新所有 import id -1 的记录?
标签: mysql sql-update sql-insert