如何更新一个表中的行,而另一个表中有重复项

詹姆士·威尔逊

如果有人由于重复问题而可以帮助我编写查询以更新我们的订单系统,我将不胜感激。

我们有一个订单表和一个客户表。

我在客户表中标识了一些重复的行,其中唯一行上的电子邮件地址和密码相同-并通过每个表中存在的CustomerNumber与唯一的实时订单相关联。这很糟糕,因为当客户登录其帐户时,他们不会看到所有订单,而只会看到与最高客户ID相关联的订单(请参见下面的登录SQL)

识别重复的用户帐户:

SELECT
    emailaddress,
    PASSWORD,
    count(*)
FROM
    scustomers
JOIN orders ON orders.customernumber = customers.CustomerNumber
WHERE Completed = 1
GROUP BY
    emailaddress,
    PASSWORD
HAVING
    count(*) > 1

登录SQL:

SELECT * FROM scustomers WHERE EmailAddress = :EmailAddress AND (Password = :Password) ORDER BY CustomerNumber DESC LIMIT 0,1

我需要写一个查询:

  • 更新“订单”表
  • 更新“ CustomerNumber”列
  • 将“客户编号”列设置为最高的“客户编号”
  • “客户”表中的行多于1个,并且具有相同的“电子邮件”和“密码”列

我从哪里开始?!

我们的系统已修复,因此任何通过登录订购新产品的客户将始终使用可能的最高关联客户编号,因此这实际上是在修复现有数据。

更新:

我从未使用过SQL Fiddle,但是这里有一些示例数据,希望对您有所帮助。

顾客:

客户编号,电子邮件,密码

3272,jwilson @ email.com,9a098e0bade9b4f2ac4ecdf86111cf7e

10001,jwilson @ email.com,9a098e0bade9b4f2ac4ecdf86111cf7e

命令:

订单号,客户号,状态

123457、3272,“ LIVE”

123456,10001,'LIVE'

我需要更新OrderNumber:123457以具有10001的CustomerNumber,而不是3272。

冲尾

步骤1:创建一个临时列以存储正确的CustomerNumber

ALTER TABLE scustomers
    ADD COLUMN id_tmp INT NOT NULL;

步骤2:检索正确的CustomerNumber

UPDATE scustomers
    INNER JOIN 
        (
        SELECT
            emailaddress,
            PASSWORD,
            MAX(CustomerNumber) AS id
        FROM
            scustomers
        GROUP BY
            emailaddress,
            PASSWORD
        ) AS duplicate ON scustomers.emailaddress = duplicate.emailaddress AND scustomers.PASSWORD = duplicate.PASSWORD
    SET id_tmp = id;

步骤3:使用正确的CustomerNumber更新订单表

UPDATE orders
    INNER JOIN scustomers ON orders.customerNumber = customers.CustomerNumber
    SET orders.customernumber = id_tmp;

步骤4:删除重复的客户

DELETE FROM scustomers
    WHERE customernumber <> id_tmp;

第5步:删除临时列

ALTER TABLE scustomers
    DROP COLUMN id_tmp;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何更新从另一个表中的一个表删除的行?

来自分类Dev

根据另一个表中的重复项合并一个表中的行

来自分类Dev

用另一个表中的重复行更新表

来自分类Dev

根据一个键消除所有重复项,并保留一个表中没有在另一个表中的记录

来自分类Dev

如何用另一个工作表中的新数据更新现有行?

来自分类Dev

如何为另一个表中的所有组重复表中的所有行?

来自分类Dev

从一个表中删除重复项(一个和另一个除外)

来自分类Dev

如何使用Doctrine更新另一个表中删除行的表行?

来自分类Dev

如何更新另一个表中的记录

来自分类Dev

SQL:检查一个表中是否存在另一个表中的条目,并删除重复项

来自分类Dev

如何从一个表中删除与另一个表匹配的行?

来自分类Dev

如何根据另一个表的值删除一个表中的行

来自分类Dev

如何通过查询另一个表中的数据选择一个表中的所有行

来自分类Dev

更新在另一个表上重复的字段

来自分类Dev

如果有任何重复项,请从另一个表插入表中

来自分类Dev

使用重复键从另一个表更新一个表

来自分类Dev

如何使用另一个表更新表

来自分类Dev

使用另一个表更新后,RedShift 表行重复

来自分类Dev

从另一个表更新表中的记录

来自分类Dev

如何根据另一个表中的最新结果选择没有重复的结果?

来自分类Dev

更新另一个表中hstore列中的现有行

来自分类Dev

Oracle 11g 从另一个具有重复项的表插入

来自分类Dev

如何计算另一个表中的行以影响另一个表

来自分类Dev

如何编写触发器以更新另一个表中的行?

来自分类Dev

如何编写触发器以更新另一个表中的行?

来自分类Dev

从另一个表中返回总和与重复项

来自分类Dev

将一个表中的行插入到另一个表中,但仅插入没有重复的行

来自分类Dev

如何从另一个具有最小值的表中更新列?

来自分类Dev

如何在另一个表ssms中更新具有相同值的列?

Related 相关文章

  1. 1

    如何更新从另一个表中的一个表删除的行?

  2. 2

    根据另一个表中的重复项合并一个表中的行

  3. 3

    用另一个表中的重复行更新表

  4. 4

    根据一个键消除所有重复项,并保留一个表中没有在另一个表中的记录

  5. 5

    如何用另一个工作表中的新数据更新现有行?

  6. 6

    如何为另一个表中的所有组重复表中的所有行?

  7. 7

    从一个表中删除重复项(一个和另一个除外)

  8. 8

    如何使用Doctrine更新另一个表中删除行的表行?

  9. 9

    如何更新另一个表中的记录

  10. 10

    SQL:检查一个表中是否存在另一个表中的条目,并删除重复项

  11. 11

    如何从一个表中删除与另一个表匹配的行?

  12. 12

    如何根据另一个表的值删除一个表中的行

  13. 13

    如何通过查询另一个表中的数据选择一个表中的所有行

  14. 14

    更新在另一个表上重复的字段

  15. 15

    如果有任何重复项,请从另一个表插入表中

  16. 16

    使用重复键从另一个表更新一个表

  17. 17

    如何使用另一个表更新表

  18. 18

    使用另一个表更新后,RedShift 表行重复

  19. 19

    从另一个表更新表中的记录

  20. 20

    如何根据另一个表中的最新结果选择没有重复的结果?

  21. 21

    更新另一个表中hstore列中的现有行

  22. 22

    Oracle 11g 从另一个具有重复项的表插入

  23. 23

    如何计算另一个表中的行以影响另一个表

  24. 24

    如何编写触发器以更新另一个表中的行?

  25. 25

    如何编写触发器以更新另一个表中的行?

  26. 26

    从另一个表中返回总和与重复项

  27. 27

    将一个表中的行插入到另一个表中,但仅插入没有重复的行

  28. 28

    如何从另一个具有最小值的表中更新列?

  29. 29

    如何在另一个表ssms中更新具有相同值的列?

热门标签

归档