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

时间:2015-02-22 23:05:50

标签: 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 JOHN ADAMS
 9  MICHAEL J ADAMS
 10  MICHAEL ADAMS

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

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

2 个答案:

答案 0 :(得分:0)

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

以下更新应处理此问题:

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;

答案 1 :(得分:0)

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

这是一个可能的答案。