将两个表合并为一个

时间:2014-03-08 13:01:56

标签: mysql sql

我只需要合并两个表(到player_new)而不会发生冲突。

在表1(player_new)中,我有65,000条记录。 在表2(player_old)中,我有47,500条记录。

两者的表结构是:

-- ----------------------------
-- Table structure for player_new
-- ----------------------------
DROP TABLE IF EXISTS `player_new`;
CREATE TABLE `player_new` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `account_id` int(11) NOT NULL DEFAULT '0',
  `name` varbinary(24) NOT NULL DEFAULT 'NONAME'
  ........................
) ENGINE=MyISAM AUTO_INCREMENT=1000 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Table structure for player_old
-- ----------------------------
DROP TABLE IF EXISTS `player_old`;
CREATE TABLE `player_old` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `account_id` int(11) NOT NULL DEFAULT '0',
  `name` varbinary(24) NOT NULL DEFAULT 'NONAME'
  ........................
) ENGINE=MyISAM AUTO_INCREMENT=1000 DEFAULT CHARSET=latin1;

有些名字是重复的,我只需要给%s_x(在player_new表中)提供相同的名字,这样玩家可以稍后更改他的名字。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

你应该按照@echo_me的建议尝试重组你的表,但是仍然可以通过将表数据合并到一个单独的表然后将该新表重命名为player_new来实现你想要的,如下所示。查看演示小提琴here

create table merged_player (
  `id` int(11) NOT NULL AUTO_INCREMENT primary key,
  `account_id` int(11) NOT NULL DEFAULT '0',
  `name` varbinary(24) NOT NULL DEFAULT 'NONAME'
);

insert into merged_player(account_id,name)
select account_id,name from player_new
union
select account_id,name from player_old;

drop table player_new;

rename table merged_player to player_new;

答案 1 :(得分:0)

为什么不使用像这样的一个表

CREATE TABLE `player` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`account_id` int(11) NOT NULL DEFAULT '0',
`Newname` varbinary(24)  DEFAULT 'NONAME',
`Oldname` varbinary(24)  DEFAULT 'NONAME'
 ......
 ) ENGINE=MyISAM AUTO_INCREMENT=1000 DEFAULT CHARSET=latin1;

然后当您插入新名称时,只需更新Newname列。并让Oldname

答案 2 :(得分:0)

如前所述,两个表都有相同的表格描述。我们可以使用像

这样的逻辑
insert into table1
select * from table2

我的意思是你的上下文简单

insert into player_new
select * from player_old

我做了一些小尝试,只看图像。

enter image description here

相关问题