Sql 查询以比较不同表中的值?
我的Rails应用程序中有一对模型,我在桥接时遇到了问题 以下是我正在使用的表格: 州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 | |
+----+--------+------------+
| 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张唱片。