我有一张table users_exam_question_answer
有以下记录 mysql
table。现在,我想复制没有重复值的记录。下面第2、4、7、8、9行是第1行的重复记录。如何将除上述行号以外的所有记录复制到新表中。这是我的sql表,其中为 user_id
, exam_id
, question_id
柱。
CREATE TABLE IF NOT EXISTS `users_exam_question_answer` (
`user_exam_question_answer_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`exam_id` int(11) NOT NULL,
`question_id` int(11) NOT NULL,
`user_answer_option` enum('0','1','2','3','4') NOT NULL DEFAULT '0',
`marks` float DEFAULT '0',
`createdon` datetime DEFAULT NULL,
`modion` datetime DEFAULT NULL,
PRIMARY KEY (`user_exam_question_answer_id`),
UNIQUE KEY `user_exam_question_answer` (`user_id`,`exam_id`,`question_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8191 DEFAULT CHARSET=latin1;
`id`,`userid`,`examid`,`question_id`,`answers`
----------------------------------------------
(1, 5259, 25, 226, '4'),
(2, 5259, 25, 226, '4'),
(3, 5259, 25, 227, '2'),
(4, 5259, 25, 226, '4'),
(5, 5259, 25, 228, '1'),
(6, 5259, 25, 229, '3'),
(7, 5259, 25, 226, '4'),
(8, 5259, 25, 226, '4'),
(9, 5259, 25, 226, '4'),
我怎样才能解决这个问题?请帮忙,数据集太大了。
3条答案
按热度按时间bvhaajcl1#
最简单的方法似乎是
table2上的unique约束将自动删除所有重复的行,并且您将根据索引只插入不重复的行。不管这是不是你想要的行为,只有你能说;你的问题没有明确说明这一点。
更清楚地说,在你的设置中,
将插入第一行(第五列将有一个“4”),第123行将被忽略。实际上,在mysql中,没有硬保证哪一行会被插入到那些具有相同索引列的行中。它通常是第一个,但可能不是。如果您需要指定,即插入第1行或第123行的条件,那么正确的答案是-一如既往:-)-gordon linoff的。
qmelpv7a2#
你想要什么
distinct
?这假设目标表和源表一样有一个自动递增的主键,因此不需要为insert提供这个值。
erhoui1w3#
你想要什么我有点困惑。有四列定义唯一行,但您仅为唯一约束指定三列。这意味着聚合:
在您的示例数据中
answers
如果其他三列的值相同,则为相同。不过,问题并没有具体说明情况必然如此。