【问题标题】:Copy/Update values from table_a to another row of table_b WHERE table_a.id = table_b.id AND table_a.name = table_b.name将值从 table_a 复制/更新到 table_b 的另一行 WHERE table_a.id = table_b.id AND table_a.name = table_b.name
【发布时间】:2013-08-07 18:36:13
【问题描述】:

我想将值从 table_a 复制/更新到 table_b 的另一行 WHERE table_a.id = table_b.id AND table_a.name = table_b.name

我有 2 个表 price_drop_apps_tempprice_drop_apps 具有相同的结构

CREATE TABLE IF NOT EXISTS `price_drop_apps_temp` (
  `application_id` int(11) NOT NULL DEFAULT '0',
  `storefront_id` int(11) NOT NULL DEFAULT '0',
  `price_1` decimal(9,3) DEFAULT NULL,
  `price_2` decimal(9,3) DEFAULT NULL,
  `price_3` decimal(9,3) DEFAULT NULL,
  `price_4` decimal(9,3) DEFAULT NULL,
  `price_5` decimal(9,3) DEFAULT NULL,
  `price_6` decimal(9,3) DEFAULT NULL,
  PRIMARY KEY (`application_id`,`storefront_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci")

price_drop_apps_temp 包含更新的application_idstorefront_id

我需要将表price_drop_app 中的所有值从列price_2 复制到表price_drop_apps_tempprice_1,其中application_idstorefront_id 在两个表中都匹配,等等其他一些列。如果price_drop_apps_temp 没有匹配的application_id AND storefront_id,则值应保持为NULL。

我尝试了关注,但它不起作用,我也不确定是否应该使用 UPDATEINNER JOIN。我的 SQL 技能非常有限,因此不胜感激。

INSERT INTO price_drop_apps_temp (price_1,price_2,price_3) SELECT price_2,price_3,price_4 FROM price_drop_apps WHERE price_drop_apps_temp.application_id = price_drop_apps.application_id AND price_drop_apps_temp.storefront_id = price_drop_apps.storefront_id

【问题讨论】:

    标签: mysql sql sql-update bulkinsert


    【解决方案1】:

    我不太确定了解您的所有需求。但是……

    我想将值从 table_a 复制/更新到 table_b 的另一行 WHERE table_a.id = table_b.id AND table_a.name = table_b.name

    您基本上想用另一个表的列更新一个表的列price[1-3]?我会尝试这样的事情:

    UPDATE price_drop_apps_temp AS dst, price_drop_apps AS src
      SET dst.price1 = src.price1, dst.price2 = src.price2, dst.price3 = src.price3
      WHERE dst.application_id = src.application_id 
        AND dst.storefront_id = src.storefront_id
    

    WHERE 子句可能需要根据您的具体需求进行调整(table_a.id/table_a.name ?!?)。但这就是精神...


    如果源表包含第二个表中不存在的某些行,您可能必须向INSERT它们添加第二遍:

    INSERT IGNORE INTO price_drop_apps_temp SELECT * FROM price_drop_apps;
    

    【讨论】:

    • 嗯,您的声明我收到以下错误:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE (dst.application_id, dst.storefront_id) = (src.application_id, src.storefr' at line 3
    • 还是给了我一个错误,但是找到了一个很好的解决方案stackoverflow.com/questions/2334712/…但是非常感谢你抽出宝贵的时间!
    • @VolkaRacho 也许是一个愚蠢的错字(我注意到一个额外的,),因为这个解决方案与你提到的基本相同。可能(?)现在修复了......
    猜你喜欢
    • 2017-08-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2023-03-17
    • 2022-11-04
    相关资源
    最近更新 更多