我有一个查询,它在一个包含几万个条目的位置表中搜索zipcode / region / city / metrocode中的壁橱匹配(应该几乎是美国的每个城市)。我正在使用的查询是:
select
metrocode,
region,
postalcode,
region_full,
city
from
dv_location
where
(
region ilike '%Chicago%'
or
postalcode ilike '%Chicago%'
or
city ilike '%Chicago%'
or
region_full ilike'%Chicago%'
)
and metrocode is not null
奇怪的是,我回来的结果集如下:
metrocode;region;postalcode;region_full;city
862;CA;95712;California;Chicago Park
862;CA;95712;California;Chicago Park
602;IL;60611;Illinois;Chicago
602;IL;60610;Illinois;Chicago
我做错了什么?我的想法是,芝加哥比芝加哥公园更重要,因为芝加哥与这个词完全匹配(即使我要求在这个词上进行通配符匹配)。
答案 0 :(得分:2)
您可以在order by子句中明确设置顺序。
...
order by
case
when city ilike 'Chicago' then 1
when city ilike 'Chicago%' then 2
when city ilike '%Chicago%' then 3
else 4
end
或者您希望订购结果......
答案 1 :(得分:2)
试试这个:
select
metrocode,
region,
postalcode,
region_full,
city,
(region = 'Chicago'
OR postalcode = 'Chicago'
OR city = 'Chicago'
OR region_full = 'Chicago') AS full_match
from
dv_location
where
(
region ilike '%Chicago%'
or
postalcode ilike '%Chicago%'
or
city ilike '%Chicago%'
or
region_full ilike'%Chicago%'
)
and metrocode is not null
order by full_match desc;