我只想在某些条件满足时才进行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
保持不变。
答案 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
这是一个可能的答案。