gpt4 book ai didi

ruby-on-rails - 如何清理我的 join_table 并删除重复的条目?

转载 作者:行者123 更新时间:2023-11-29 14:23:02 31 4
gpt4 key购买 nike

我有 2 个模型 - QuestionTag - 它们之间有一个 HABTM,并且它们共享一个连接表 questions_tags .

大饱眼福这个坏小子:

1.9.3p392 :011 > Question.count
(852.1ms) SELECT COUNT(*) FROM "questions"
=> 417
1.9.3p392 :012 > Tag.count
(197.8ms) SELECT COUNT(*) FROM "tags"
=> 601
1.9.3p392 :013 > Question.connection.execute("select count(*) from questions_tags").first["count"].to_i
(648978.7ms) select count(*) from questions_tags
=> 39919778

我假设 questions_tags连接表包含一堆重复记录 - 否则,我不知道为什么它会这么大。

如何清理连接表,使其只有 uniq内容?或者我什至如何检查那里是否有重复的记录?

编辑 1

我正在使用 PostgreSQL,这是 join_table questions_tags 的模式

  create_table "questions_tags", :id => false, :force => true do |t|
t.integer "question_id"
t.integer "tag_id"
end

add_index "questions_tags", ["question_id"], :name => "index_questions_tags_on_question_id"
add_index "questions_tags", ["tag_id"], :name => "index_questions_tags_on_tag_id"

最佳答案

我将其添加为新答案,因为它与我的上一个有很大不同。这并不假设您在连接表上有一个 id 列。这将创建一个新表,在其中选择唯一行,然后删除旧表并重命名新表。这比涉及子选择的任何事情都要快得多。

foo=# select * from questions_tags;
question_id | tag_id
-------------+--------
1 | 2
2 | 1
2 | 2
1 | 1
1 | 1
(5 rows)

foo=# select distinct question_id, tag_id into questions_tags_tmp from questions_tags;
SELECT 4
foo=# select * from questions_tags_tmp;
question_id | tag_id
-------------+--------
2 | 2
1 | 2
2 | 1
1 | 1
(4 rows)

foo=# drop table questions_tags;
DROP TABLE
foo=# alter table questions_tags_tmp rename to questions_tags;
ALTER TABLE
foo=# select * from questions_tags;
question_id | tag_id
-------------+--------
2 | 2
1 | 2
2 | 1
1 | 1
(4 rows)

关于ruby-on-rails - 如何清理我的 join_table 并删除重复的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15373723/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com