不使用ID删除MySQL 5.7.12中的重复项

不使用ID删除MySQL 5.7.12中的重复项,mysql,Mysql,我需要将新数据(TableB)附加到旧表(TableA)中。然后删除重复项。我试过两种版本。一件作品。另一个没有。正在工作的方法需要我添加主键。可以跳过这个吗 /* Append new data to old table */ insert into TableA select * from TableB; /* First method does not work */ ALTER IGNORE TABLE TableA ADD UNIQUE (stock, date) /* Secon

我需要将新数据(TableB)附加到旧表(TableA)中。然后删除重复项。我试过两种版本。一件作品。另一个没有。正在工作的方法需要我添加主键。可以跳过这个吗

/* Append new data to old table */
insert into TableA select * from TableB;

/* First method does not work */
ALTER IGNORE TABLE TableA ADD UNIQUE (stock, date)

/* Second method work but requires ID. My actual table is very large with millions of rows and hundreds of columns. I will need to create index for fast queries. Hence it is better not to add un-necessary columns */

ALTER TABLE TableA
  ADD ID INT auto_increment primary key;

delete TableA
from TableA
join
( select stock, date, min(id) as theMin,count(*) as theCount 
  from TableA 
  group by stock, date 
  having theCount>1
) xxx 
on TableA.stock = xxx.stock and TableA.date = xxx.date and TableA.id>xxx.theMin
有什么想法吗

非常感谢
LL

以下是如何添加主键(每个自尊表都应该有主键)

例2:

create table t8
(   stock varchar(100) not null,
    `date` date not null,
    other int not null
);
insert t8(stock,`date`,other) values ('a','2008-01-01',1),('b','2008-01-01',1);

alter table t8 add primary key (stock,`date`);

show create table t8;
CREATE TABLE `t8` (
   `stock` varchar(100) NOT NULL,
   `date` date NOT NULL,
   `other` int(11) NOT NULL,
   PRIMARY KEY (`stock`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
然后对插入执行
INSERT IGNORE
策略。请参阅下面的评论。

这对我很有用


从统计组中按家庭团队顺序按家庭团队选择家庭团队

无论如何,你应该有一个主键。如果我使用变量名“stock”和“date”作为主键,也作为索引,那该怎么办?我不认为仅仅是编号的主键是必要的。我还认为我的主键编号将非常大。每个表有1000万行。我有大约50个这样的表要相互附加。删除重复项后,我认为主键的编号不会重新设置并再次自动递增。如果您有一列(或2的组合)是唯一的,请确定。请参阅编辑。这样做的好处是,您可以在其中插入一个
INSERT IGNORE
,它将忽略重复,如果这是会发生的情况的话。因此,它会插入那些不是被复制的,并忽略被复制的
INSERT IGNORE
INSERT
类似,只是后面有一个单词IGNORE。我只是在变量中添加了“主键”。并使用“插入忽略”。我收到了关于重复的警告信息,但结果很好。删除重复项的最简单方法!谢谢,先生。同一行中的其他值将被删除,只要它们被标识为重复值。我想我会坚持使用MySQL语言。感谢这是“mysql语言”,如果您只想输入mysql语句/查询,我正在使用PHP发出mysql查询:-从统计组中按hometeam顺序按hometeam选择hometeam我完全困惑-我回答了问题,举了个例子并被否决了????OP要求纯mysql,而不是PHP上下文中的mysql。在没有PHP的情况下重新编写它,你可能会获得更多的成功。我的不经修改的PHP修正后的问题引出了一个问题:如果没有一个唯一的ID,怎么做它——而不是如何创建一个唯一的ID。至少你没有被否决。
create table t8
(   stock varchar(100) not null,
    `date` date not null,
    other int not null
);
insert t8(stock,`date`,other) values ('a','2008-01-01',1),('b','2008-01-01',1);

alter table t8 add primary key (stock,`date`);

show create table t8;
CREATE TABLE `t8` (
   `stock` varchar(100) NOT NULL,
   `date` date NOT NULL,
   `other` int(11) NOT NULL,
   PRIMARY KEY (`stock`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8