要查找国家/地区的电话号码前缀,请执行以下查询:
SELECT country_id
FROM phonenumber_prefix
WHERE '<myphonnumber>' LIKE prefix ||'%'
ORDER BY LENGTH(calling_prefix) DESC
LIMIT 1
要查询表格中的电话号码,我会运行如下查询:
SELECT phonenumber
FROM phonenumbers
现在我想将这些查询合并为一个,以获取所有电话号码的国家/地区。我知道我可以将第一个查询放入一个函数,例如getCountry()然后查询
SELECT phonenumber, getCountry(phonenumber)
FROM phonenumbers
但是有一种方法可以在一个查询中使用连接来执行此操作,我使用的是postgresql 9.2吗?
答案 0 :(得分:2)
您可以使用相关子查询执行此操作:
SELECT phonenumber,
(SELECT country_id
FROM phonenumber_prefix pp
WHERE pn.phonenumber LIKE prefix ||'%'
ORDER BY LENGTH(calling_prefix) DESC
LIMIT 1
) as country_id
FROM phonenumbers pn;
答案 1 :(得分:0)
这将为您提供最长匹配前缀的相应国家/地区ID的数字列表:
SELECT * FROM (
SELECT
p.phonenumber, pc.country_id,
ROW_NUMBER() OVER (PARTITION BY phonenumber ORDER BY LENGTH(pc.prefix) DESC) rn
FROM
phonenumber_prefix pc INNER JOIN
phonenumbera p ON p.phonenumber LIKE pc.prefix || '%' ) t
WHERE t.rn = 1
答案 2 :(得分:0)
您可以使用连接执行此操作:
select phonenumber, countryId
from phonenumbers
inner join phonenumber_prefix on phonenumber like prefix||'%'
请注意,这样效率会非常低,因为它无法使用索引进行连接。
您也可以反过来(通过从电话号码的开头提取正确的位数)。这将改善一些事情,因为它将能够使用索引来查找前缀,但它仍然需要拆分每个电话号码。