我有一个包含这样的东西的表
╔═══════╦══════════╗
║ EMPID ║ UserName ║
╠═══════╬══════════╣
║ 1 ║ Josh ║
║ 2 ║ Kate ║
║ 3 ║ Josh ║
║ 4 ║ Kate ║
║ 5 ║ Kate ║
║ 6 ║ Josh ║
║ 7 ║ Morgan ║
╚═══════╩══════════╝
我想要复制所有拥有Kate的行,但在Kathy的副本中替换Kate,然后复制包含Josh的所有行,但用Joshy替换重复项作为用户名。我不知道该如何解决这个问题。有些MySQL专家可以帮忙吗?
答案 0 :(得分:1)
您可以使用INSERT...SELECT
syntax:
INSERT INTO mytable (UserName)
SELECT 'Kathy'
FROM mytable
WHERE UserName = 'Kate';
然后为Josh做类似的事情:
INSERT INTO mytable (UserName)
SELECT 'Joshy'
FROM mytable
WHERE UserName = 'Josh';
如果您更喜欢一个SQL语句:
INSERT INTO mytable (UserName)
SELECT CASE UserName
WHEN 'Kate' THEN 'Kathy'
WHEN 'Josh' THEN 'Joshy'
END
FROM mytable
WHERE UserName IN ('Kate', 'Josh');
在任何一种情况下,SELECT
语句都会确保您获得每个重复实例的结果( Kate 的3个结果和 John 的3个结果)。对于每个结果,您都要提供要插入的调整后名称的UDPATE
语句。因此,以这种方式插入正确的记录数。