如果满足某些条件则 MySQL 更新(或创建过程)

标签 mysql sql

我只想在满足某些条件时才进行 mysql 更新。

我的表中的列是 fname、mname、lname(名字、中间名、姓氏)。

数据例如,

    fname mname lname
 1   RONALD DAVID VALE
 2   RONALD D VALE
 3   RONALD  VALE
 4   JACK A SMITH
 5   JACK B SMITH
 6   JACK  SMITH
 7  MICHAEL JAMES ADAMS
 8  MICHAEL JOHN ADAMS
 9  MICHAEL J ADAMS
 10  MICHAEL ADAMS

如果姓氏和名字相同,那么我检查中间名的第一个字母。然后我想在我们的例子中将中间名更新为“DAVID”,因为我们想让他们成为同一个人。但是,如果有两个不同的中间名,例如行 4, 5 那么,我们希望保持原样,因为我们认为三个 JACK SMITH 是不同的人。

此外,如果有两个以相同字母开头的不同中间名,我们不会更新这些名称。例如,行 7,8,9,10 保持不变。

最佳答案

如果我理解正确,您正在寻找具有多个记录的名字/姓氏对,并且这些记录中只有一个中间名首字母。

以下更新应该可以处理此问题:

update table t join
       (select lname, fname, max(mname) as mname
        from table t2
        having count(*) > 1 and min(mname) = max(mname)
       ) t2
       on t.lname = t2.lname and t.fname = t2.fname
    set t.mname = t2.mname
    where t.mname is null;

关于如果满足某些条件则 MySQL 更新(或创建过程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28664466/

相关文章:

MySQL 选择 MySQL 结果子集中最接近的匹配

Mysql - 对我的业务逻辑有一点帮助

SQL 网络接口(interface),错误 : 26 - Error Locating Server

sql - 如何从 SQL Server 2005 函数中抛出异常?

Php/Mysql 进程存在用户和管理员权限问题

php - 空白变量和 INT 列?

javascript - 将 JS 变量传递给新的 PHP 文件

sql - 当不允许组合键时创建散列主键

sql - 将排序规则应用于 sql server 数据库

sql - 搜索表中特定列的方法