1

areaテーブルにフィールドがpropertyあり、このフィールドのレコードはに保存さ1-0-3-40-4-2-0ます。各レコードで、1番目は面積の最高額を表し、2番目は2番目に高く、3番目は3番目に高く、最後を表します。つまり、4番目は面積の最低額を表します。形式x-x-x-xは、私たちの国で土地または財産の面積がどのように表されるかです。

上記のフィールドで完全一致を検索することは問題ではありませんが、最も近い一致の結果も表示する必要がある場合はどうなりますか。のように、、、1-0-3-3はと最も近い一致です1-0-4-41-0-3-51-0-3-4

出来ますか?

ありがとう

4

2 に答える 2

2

可能ですが、面倒です。「area」フィールドを個々の列に正規化できれば、ソリューションがよりきれいになり、はるかに高速になります。

実装例は次のとおりです。

select area, 1 as match_quality
from property
where area = '1-0-3-4'
union
select area, 2 as match_quality
from property
where area like '1-0-3-_' 
union
select area, 3 as match_quality
from property
where area like '1-0-_-4' 

これは、エリア間の距離が特定の列のどの値でも同じであることを前提としています。そうでない場合は、(SUBSTRINGを介して)コードを取得し、必要な演算を実行することで、コードを改良できます。

領域を個々の列に変換すると、これはより簡単でより良いだけでなく、より高速になります(上記のユニオンの最後のクエリは、インデックスをそれほど効率的に使用できないため、遅くなります)。

例えば:

select *, 1 as match_quality
from property
where area1 = 1
and area2 = 0
and area3 = 3
and area4 = 4
union 
select *, 2 as match_quality
from property
where area 1 = 1
and area 2 = 0
and area 4 = 4
union
select *, 3 as match_quality
from property
where area 1 = 1
and area2 = 0
and area4 = 4
于 2012-10-11T14:43:16.533 に答える
1

多分substringあなたを助けるでしょう:

select * 
from property
where SUBSTRING(area,1,3)=SUBSTRING('1-0-3-4',1,3)
于 2012-10-11T14:29:45.157 に答える