使 MySQL 表唯一

发布于 2024-08-06 20:26:08 字数 131 浏览 5 评论 0原文

嘿,我创建了一个蜘蛛来爬行 PDF 文档,并将文档中的每个单词记录到 MySQL 数据库的表中。

显然,像“the”、“and”、“or”等词在一本书中出现很多很多次。

我只是想知道从表中删除重复值的最快方法是什么?

Hay, I created a spider to crawl through a PDF document and log every word in the document into a table in a MySQL database.

Obviously words like 'the', 'and', 'or' etc appear in a book many, many times.

I'm just wondering what's the quickest method to remove dupe values from a table?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

对不⑦ 2024-08-13 20:26:08

创建一个不索引单词的表,并使用批量插入放入书中的所有单词(您也可以使用 LOAD DATA)。完成插入后,在 word 字段上添加新索引,

然后使用以下命令创建第二个表:

CREATE TABLE newTable SELECT DISTINCT word FROM oldTable

Create a table without indexing the words and put in all the words from the book using mass inserts (you could also use LOAD DATA). When you're done with insertions, add a new Index on the word field

Then create a second table using:

CREATE TABLE newTable SELECT DISTINCT word FROM oldTable
甜妞爱困 2024-08-13 20:26:08

您可以确保没有重复项进入表中,而不是删除重复项。

假设您的表只有 2 个字段,id 和 word:

INSERT INTO table SELECT null, 'word' FROM table WHERE NOT EXISTS (SELECT * FROM table WHERE word = 'word') LIMIT 1;

仅当单词尚不存在时,才会将单词插入表中

Instead of removing duplicates, you could make sure that no duplicates ever make it into the table.

Presuming your table has only 2 fields, id and word:

INSERT INTO table SELECT null, 'word' FROM table WHERE NOT EXISTS (SELECT * FROM table WHERE word = 'word') LIMIT 1;

This will insert the word into the table only if it's not already in there

背叛残局 2024-08-13 20:26:08

如果您可以重新运行脚本来填充数据库,则可以在“word”字段上添加唯一键,而不是 INSERT INTO 执行 REPLACE INTO。这将在添加重复字段之前删除记录的先前实例。这可能不是最有效的方法,但它相当简单。有关更多详细信息,请参阅此处:

http://dev.mysql.com/ doc/refman/5.0/en/replace.html

If you can rerun the script to populate the database, you could add a unique key on the "word" field and instead of INSERT INTO do a REPLACE INTO. This will delete the previous instance of the record before adding a duplicate field. This may not be the most efficient way to do it, but it's rather simple. See here for more details:

http://dev.mysql.com/doc/refman/5.0/en/replace.html

窝囊感情。 2024-08-13 20:26:08

选择单词字段上的不同,然后删除具有不同 id 的所有行?我不是子查询方面的高手,所以没有 atm 的例子:)

select distinct on word field, and then delete all rows that have a different id? I'm not a master in subqueries so no example atm :)

别忘他 2024-08-13 20:26:08
delete from words where idcolumn not in
  (select min(idcolumn) 
   from words T2 
   where T2.plain = WordsTable.plain)

如果您为找到的每个单词添加了 (idcolumn, plain),则此方法有效。

如果您没有 id 列 (pk),那么您可以使用 Anax 的解决方案。

除了不插入重复项(codeburger 注释)之外,您还可以在普通列上设置唯一索引。

delete from words where idcolumn not in
  (select min(idcolumn) 
   from words T2 
   where T2.plain = WordsTable.plain)

This works if you added (idcolumn, plain) for every word you found.

If you do not have an id column (pk) then you can use Anax's solution.

In addition to not inserting duplicates (codeburger comment), you can just set a unique index on your plain column.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文