【问题标题】:Update Records in TargetTable from Source Table with Identical Name Records从具有相同名称记录的源表更新 TargetTable 中的记录
【发布时间】:2014-05-03 13:40:40
【问题描述】:

我正在尝试使用 TableB 中的记录更新 TableA,但仅在 TableA 中没有具有相同名称列值的记录的情况下。我有可以做到这一点的查询,但是我想做的是在存在“匹配”记录但在 Fieldx/y/z 中没有值的情况下,现有记录将更新。例如:

  • 目标表 |鲍勃 |空 |空|
  • 源表 |鲍勃 |纽约 |医生

由于存在“Bob”,目标表不会创建新记录,但现有记录将添加 New York 和 Doctor,因为这些字段为 NULL 或空/

【问题讨论】:

    标签: mysql insert insert-update


    【解决方案1】:

    您可以使用on duplicate key update 选项到insert 来执行此操作。先在name上创建唯一索引,不允许重复:

    create unique index TargetTable_name on TargetTable(name);
    

    然后:

    insert into TargetTable(name, col1, col2)
        select name, col1, col2
        from SourceTable
        on duplicate key update col1 = coalesce(TargetTable.col1, values(col1)),
                                col2 = coalesce(TargetTable.col2, values(col2));
    

    【讨论】:

    • 那太好了,谢谢。我正在尝试创建唯一索引,结果发现已经有骗子了。不确定是否将其作为一个不同的问题发布,但现在我需要找到受骗者并保留在指定字段中具有值的人并摆脱其他人。相反,我需要确保我摆脱的那些没有被其他具有 ParentID 字段的记录引用。我没有意识到这张桌子在内部如此混乱,但这是我必须使用的全部。
    • @MarkH 。 . .将其作为一个单独的问题提出,连同示例数据以及您想用它做什么。
    • 感谢您的帮助,将其标记为您已回答。
    猜你喜欢
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多