【问题标题】:MaraiDB / MySQL Insert Into Table From Select Query But On Duplicate Key Use Data From Select QueryMariaDB / MySQL 从选择查询插入表但重复键使用选择查询中的数据
【发布时间】:2018-07-17 10:11:56
【问题描述】:

我创建了如下表A:

我使用简单的 INSERT INTOSELECT 语句输入了上面的数据。现在源数据已更正,我想使用 INSERT INTO, SELECT, ON DUPLICATE KEY UPDATE,但是当我运行代码时,0 的您在上面看到的 NULL 不会更新为新值。

这是我的代码

INSERT INTO
TABLEA (uniqueid, year, month, costcentre, amount)

SELECT
  SS.uniquekey, SS.year, SS.month, SS.source, SS.totalamount
FROM
 (SELECT
    uniquekey, `YEAR`, `MONTH`, SOURCE, totalamount
  FROM
    TABLEB
  UNION ALL
  SELECT
    uniquekey, `YEAR`, `MONTH`, SOURCE, totalamount
  FROM
    TABLEC
 ) as SS
ON DUPLICATE KEY 
UPDATE
  TABLEA.YEAR = VALUES(SS.year),
  TABLEA.MONTH = VALUES(SS.month), 
  TABLEA.COSTCENTRE = VALUES(SS.SOURCE), 
  TABLEA.AMOUNT = VALUES(SS.TOTALAMOUNT)
;

所以我正在寻找的答案是:

  1. 我希望 TABLEASELECT 查询中的每个 UNIQUE 都有一行。
  2. 如果 TABLEA 包含与 SELECT 相同的 UNIQUEID,那么我希望它更新 YEARMONTH >、COSTCENTREAMOUNT 来自 SELECT 查询

【问题讨论】:

  • 我认为应该是ON DUPLICATE KEY UPDATE YEAR = VALUES(YEAR) - 即您应该只引用 TABLEA 的列名
  • 嗨伊沃。太棒了……它奏效了。
  • 太棒了。我会将评论转换为答案,以便您接受它

标签: mysql mariadb on-duplicate-key


【解决方案1】:

将我的评论转换为答案。

我认为应该是 ON DUPLICATE KEY UPDATE YEAR = VALUES(YEAR) - 即您应该只引用 TABLEA 的列名

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2018-01-04
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    相关资源
    最近更新 更多