查询以比较不同表中的值?

时间:2014-09-20 12:32:19

标签: sql ruby-on-rails postgresql activerecord

我的Rails应用程序中有一对模型,我遇到了桥接困难。

这些是我正在使用的表格:

状态

+----+--------+------------+
| id |  fips  |    name    |
+----+--------+------------+
|  1 | 06     | California |
|  2 | 36     | New York   |
|  3 | 48     | Texas      |
|  4 | 12     | Florida    |
|  5 | 17     | Illinois   |
|  … | …      |    …       |
+----+--------+------------+

地方

+----+--------+
| id | place  |
+----+--------+
|  1 | Fl     |
|  2 | Calif. |
|  3 | Texas  |
|  … |   …    |
+----+--------+

并非所有地方都在州模型中表示,但我正在尝试执行查询,我可以将地点的place值与所有州name进行比较,找到最接近的匹配,以及返回相应的fips

因此,如果我的输入为Calif.,我希望我的输出为06

我仍然是编写SQL查询的新手,所以如果有一种方法可以在我的Rails(4.1.5)应用程序中使用Ruby,那将是理想的。

我的另一个攻击计划是在“places”表中添加一个fips列,并编写一些可以运行上述比较的内容,然后填充fips,这样我的应用就不必了每次加载页面时运行此查询。但我非常喜欢初学者,听起来很有野心。

1 个答案:

答案 0 :(得分:2)

这在SQL中不是一个简单的查询。您最好的选择之一是模糊字符串匹配例程,其中记录了here

例如,soundex()levenshtein()可能足以满足您的需求。这是一个例子:

select distinct on (p.place) p.place, s.name, s.fips, levenshtein(p.place, s.name) as dist
from places p cross join
     states s
order by p.place, dist asc;