在MySQL中删除重复项

在MySQL中删除重复项,mysql,insert,alter-table,Mysql,Insert,Alter Table,问题是: CREATE TABLE `query` ( `id` int(11) NOT NULL auto_increment, `searchquery` varchar(255) NOT NULL default '', `datetime` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM 首先,我想用以下内容删除表格: ALTER TABLE `querynew` DROP `id` 然后删除双条目。。

问题是:

CREATE TABLE `query` (
`id` int(11) NOT NULL auto_increment,
`searchquery` varchar(255) NOT NULL default '',
`datetime` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM
首先,我想用以下内容删除表格:

ALTER TABLE `querynew` DROP `id`
然后删除双条目。。 我试了一下:

INSERT INTO `querynew` SELECT DISTINCT * FROM `query`
但是没有成功


使用ALTER TABLE query ADD UNIQUE searchquery-是否可以只保存一次查询?

您应该能够在不删除列的情况下执行此操作:

DELETE FROM `query`
 WHERE `id` IN (
        SELECT `id`
          FROM `query` q
         WHERE EXISTS ( -- Any matching rows with a lower id?
                SELECT *
                  FROM `query`
                 WHERE `searchquery` = q.`searchquery`
                   AND `datetime` = q.`datetime`
                   AND `id` < q.`id`
               )
       );

我将使用MySQL的多表删除语法:

DELETE q2 FROM query q1 JOIN query q2 USING (searchquery, datetime)
WHERE q1.id < q2.id;

我会使用一个带有MySQL特定关键字的索引来实现这一点。这一举两得:它删除了重复的行,并添加了一个唯一的索引,这样您就不会获得更多的行。它通常也比其他方法快:

alter ignore table query add unique index(searchquery, datetime); 

没有成功,1064-您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在“q WHERE EXISTS SELECT*FROM query WHERE'sea”第1行中的第二个错误:1327-未声明变量:temp\u query:但我创建了与temp\u query相同的表..D'oh!那个总是让我着迷。我希望修复了。第二个使用SQL Server语法。我不知道MySQL中的确切等价物,但您可以单独创建临时表,然后插入其中。无论如何,@比尔的答案比我的好得多,所以这一切都没有意义。
alter ignore table query add unique index(searchquery, datetime);