有效地匹配来自两个不同表的值

时间:2011-11-30 08:50:54

标签: mysql ruby database ruby-on-rails-3

我有两张桌子

 class CreateMasterUrls < ActiveRecord::Migration
  def change
   \create_table :master_urls do |t|
  t.string :url
  t.string :host

  t.timestamps
 end
 add_index :master_urls, [:url], :name => :idx_url
 add_index :master_urls, [:host], :name => :idx_host
 end
end

 class CreateUrlLists < ActiveRecord::Migration
  def change
  create_table :url_lists do |t|
  t.string :url
  t.integer :project_id

  t.timestamps
 end
 end
end

我想检查url_lists表中的URL是否存在于master_urls中,如果不是,则将其添加到master_urls表中。有任何线索怎么做?

一种方法是进行正则表达式匹配。但它没有效率,也没有解决问题。

1 个答案:

答案 0 :(得分:0)

我首先尝试沿着这些(SQL)行。 。

insert into master_urls (url)
select ul.url 
from url_list ul
where ul.url not in (select url from master_urls);

这不是最有效的方法,但它很容易理解。

但这不是你的真正的问题。

如果要求url_list中的所有url必须始终位于master_urls中,那么您需要使用dbms来确保发生这种情况。根据您的应用程序,您可能需要外键约束,触发器或应用程序代码中的重大更改。