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

Sql 查询以比较不同表中的值?,sql,ruby-on-rails,postgresql,activerecord,Sql,Ruby On Rails,Postgresql,Activerecord,我的Rails应用程序中有一对模型,我在桥接时遇到了问题 以下是我正在使用的表格: 州 +----+--------+------------+ | id | fips | name | +----+--------+------------+ | 1 | 06 | California | | 2 | 36 | New York | | 3 | 48 | Texas | | 4 | 12 | Florida | |

我的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
s进行比较,找到最接近的匹配项,并返回相应的
FIP

因此,如果我的输入是加州,我希望我的输出是06

我对编写SQL查询还很陌生,所以如果有一种方法可以在我的Rails(4.1.5)应用程序中使用Ruby来实现这一点,那将是非常理想的


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

这在SQL中不是一个简单的查询。您的最佳选择是一个模糊字符串匹配例程,这是有文档记录的

例如,
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;

places.place
字段中的缩写是否有任何押韵或原因?在考虑SQL之前,通常需要确定从
places
中的
place
states
中的
name
的匹配方案,它看起来像是
places.place
=
Florida State
states.name
=
Florida
。不一定,但在足够多的情况下,这将是惯例。为什么你没有在这两个模型之间创建一个关系?在我的
models/places.rb
中,我的位置
属于:states
,这会更容易,但我不知道如何在这里建立除此之外的关系。Places大约有3000张唱片。