【问题标题】:mysql copy data from table to table 2 without duplicate the data and add new rowsmysql将数据从表复制到表2而不复制数据并添加新行
【发布时间】:2018-05-25 11:05:37
【问题描述】:

我有 2 张桌子:

table1 - IP、SN、版本、日期、工作

table2 - IP、SN、版本

我只想将表 1 中已不在表中的 IP 添加到表 2。并根据table1更新SN+版本(只是我添加的新行)

我在这里找到了如何根据另一个表中的 IP 进行更新 但我没有找到如何在不重复的情况下添加它。

这就是我想做的:

table 1 
IP
10.0.0.5
10.0.0.6
10.0.0.7

table2 
IP 
10.0.0.5
192.168.30.11
1.1.1.1

所以函数table1的末尾不会改变 和 table2 将是:

IP
10.0.0.5
192.168.30.11
1.1.1.1
10.0.0.6
10.0.0.7

谢谢。

【问题讨论】:

    标签: mysql sql-update mysql-workbench


    【解决方案1】:

    这里有两个单独的查询来完成这项工作。

    1. 在表 2 中添加不存在的记录

      INSERT INTO table2 (SELECT IP, SN, Vesrion FROM table1 where table1.IPnot in (select IPfrom table2));
      
    2. 更新现有数据

      UPDATE TABLE table2 INNER JOIN table1 ON table2.IP = table1.IP SET table2.SN = table1.SN, table2.vesion = table1.version WHERE table1.version <> table2.version OR table2.SN <> table1.SN
      

    【讨论】:

    • 没用 - 没有添加任何内容 :-( 有什么问题?
    • 能否提供table1 & 2的数据和架构?
    【解决方案2】:

    使用NOT EXISTS 排除IP 已经在table1 中的行。

    INSERT INTO table1
                (IP)
                SELECT t1.ROU_IP
                       FROM routers t1
                       WHERE NOT EXISTS (SELECT *
                                                FROM table1 t2
                                                WHERE t2.IP = t1.ROU_IP);
    

    【讨论】:

    • 对不起 - 我迷路了,你能用我自己的行名显示 mw 吗?谢谢,
    • @Korenron:行没有名字。也许你的意思是列?但我使用了您的 OP 中的名称。那你什么意思?
    • 对不起 - colomns 。如果你可以低头看我的回答 - 我写了所有东西的真实姓名..第一篇文章很笼统:-)
    • @Korenron:啊哈,是的……不要那样做。如果您想添加或更改任何内容,请编辑您的问题。仅在确实是答案时才发布答案,例如,当您自己找到解决方案时。还要考虑从一开始就准确地展示您在问题中的内容。否则它完全令人困惑。请编辑您的问题并删除该答案。无论如何,看看我的编辑...
    • 哦 - 不知道......它正在工作,所以谢谢你:-)并且只是为了理解 - t1&t2 是 tmp 变量对吗?
    猜你喜欢
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多