【问题标题】:How to convert this REPLACE INTO statement into its equivalent UPDATE statement in MySQL?如何将此 REPLACE INTO 语句转换为 MySQL 中等效的 UPDATE 语句?
【发布时间】:2015-01-05 00:38:42
【问题描述】:

我有以下使用 REPLACE INTO 的 MySQL 语句:

 INSERT INTO `tableX`.latest_status (tableX_id, name, nick)
 (
     SELECT records.id,
            records.name,
            records.nick
     FROM `tableX`.records records
     WHERE (`records`.`time` = 0)
 )
 ON DUPLICATE KEY UPDATE name=tableX.name, nick=tableX.nick

由于创建了一些错误,我意识到REPLACE INTO 不适合我的应用程序。我想要的是更新现有的行。如果该行不存在,则什么也不做。我猜 UPDATE 应该是正确的子句。我在这一点上是对的吗?

我尝试使用UPDATE 将上述 MySQL 语句转换为等效语句。这是代码;

UPDATE `tableX`.latest_status
SET tableX_id, name, nick =
(
     SELECT records.id,
            records.name,
            records.nick
     FROM `tableX`.records records
     WHERE (`records`.`time` = 0)
)

很遗憾,SET tableX_id, name, nick 存在一些语法错误。等效的 UPDATE 语句应该是怎样的?

【问题讨论】:

    标签: mysql sql join sql-update


    【解决方案1】:

    我不知道我是否能得到你想要的,但这可能会对你有所帮助(我认为你可以用你的桌子做类似的事情)

    UPDATE patient
    SET full_name=(
         SELECT full_name
         FROM staff
         WHERE staff.id=patient.id
    )
    ,national_number =
    (
         SELECT national_number
         FROM staff
         WHERE staff.id=patient.id
    )
    

    【讨论】:

    • 虽然你的回答看起来冗长而低效,但至少对于我这样的新手来说更容易理解。我试过了,一切正常。所以,我选择它作为正确答案。谢谢。
    • 谢谢你,我也是新手,所以我知道找到一个简单的答案有多难
    【解决方案2】:

    您的语法已关闭 - 您无法编写类似的查询。

    尝试通过连接更新:

    UPDATE tableX.latest_status s
    JOIN tableX.records r
      ON id = tableX_id
      AND r.name = s.name
      AND time = 0
    SET s.nick = r.nick
    

    【讨论】:

    • 我认为您的答案是正确的,但我不知道如何将其转换为我的代码。错在我,因为我不够好。 Moneer Kamal 的另一个答案效率不高,但至少对我来说更容易理解。我用他的回答让事情顺利进行。因此,我将投票他的答案为正确答案。对不起。
    • 没关系。如果另一个答案对您更有效,那么它也可以对其他人更好。永远不要感到有投票的压力——只要自然地投票。编码愉快。
    猜你喜欢
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2011-01-24
    • 2020-08-31
    相关资源
    最近更新 更多