【问题标题】:Mysql: update records from source table into destination tableMysql:将记录从源表更新到目标表
【发布时间】:2013-04-07 10:11:22
【问题描述】:

我有 2 张相同的桌子。 'Number' 和 'Productcode' 字段构成唯一键。这个唯一的组合键是两个表相同的。

我想将表 2 中的记录插入表 1。可能是记录唯一键已经存在。在这种情况下,需要为所有字段更新记录。但是...仅当表 2 记录中的日期字段比表 1 中的日期字段更新时才需要更新记录。

我尝试了以下方法:

INSERT INTO Table_dest (Number, Productcode, TransactionDate,
                        TransactionTime, Price)
SELECT
  Number, Productcode, TransactionDate, TransactionTime, Price
FROM
  Table_source
WHERE
  Table_source.TransactionDate >= Table_dest.TransactionDate
  AND Table_source.TransactionTime > Table_dest.TransactionTime;

但它给了我关于 WHERE 子句的错误。 它还会在重复项上给出错误,但我不知道如何解决。 有人有什么建议吗? 谢谢!

【问题讨论】:

    标签: mysql


    【解决方案1】:

    在连接两个表时应该遵循这种格式:

    INSERT INTO tableA (a1, a2, a3)
    
    SELECT b1, b2, b3
    FROM tableB b
    JOIN tableA a ON a.a1 = b.b1
    WHERE (CONDITION)
    

    看看它是否适合你。

    【讨论】:

    • 尝试只运行选择查询并检查结果。源表和目标表中的列数必须匹配。
    • 谢谢!我做了以下操作: INSERT INTO Table_dest (Number, Productcode, TransactionDate, TransactionTime, Price) SELECT Number, Productcode, TransactionDate, TransactionTime, Price FROM Table_source s LEFT JOIN Table_dest d ON s.Number = d.Number AND s.Productcode = d .Productcode WHERE s.TransactionDate >= s.TransactionDate AND s.TransactionTime > d.TransactionTime;但现在它给了我一条错误消息:“字段列表中的列‘数字’不明确”。
    • 由于字段命名方式相同导致此错误结果。就像两个表都有相同名称的字段。 MySQL 引擎无法决定跟随哪个表。试试这样的:SELECT s.Number, s.Productcode
    • 谢谢哈皮特。那解决了它。现在唯一剩下的就是只插入它在两个表中找到的记录。我会想办法解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 2017-01-26
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多