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

如果某些条件满足,MySQL更新(或创建过程),mysql,sql,Mysql,Sql,我只想在满足某些条件的情况下进行mysql更新 我的表中的列是fname、mname、lname(First、Middle、Last Name) 比如数据, 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

我只想在满足某些条件的情况下进行mysql更新

我的表中的列是fname、mname、lname(First、Middle、Last Name)

比如数据,

    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”,因为我们想让他们成为同一个人。但是,如果有两个不同的中间名,例如row
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;
这是一个可能的答案

UPDATE tablename t JOIN
  ( SELECT fname, mname, min(mname) minname, max(mname) mxname, lname, count(*) as qty
    FROM tablename 
    GROUP BY fname, lname
    HAVING qty > 1
) sub
ON t.fname = sub.fname AND t.lname = sub.lname
SET t.mname = IF(sub.qty = 2, sub.mxname, IF(sub.qty > 2 AND minname = mxname, sub.mxname,  NULL))
WHERE t.mname is NULL