2013-03-05 102 views
0

我需要針對表中的列運行最長的匹配前綴,而不僅僅是單個值。對於單個值,我使用類似SELECT value, prefix as lmp FROM aTable WHERE SUBSTRING(value,1, LENGTH(prefix)) = prefix ORDER BY prefix DESC limit 1針對表列運行最長匹配前綴的最佳方式是什麼?

問題是,如果正在對很多記錄進行操作,則需要執行表掃描並逐個獲取值,並且會在客戶端和服務器之間引發大量流量。

有沒有辦法在一個單一的查詢將涉及子查詢而不是存儲過程?我正在使用PostgreSQL 8.4。

回答

1

您可以使用CTE把值表,做:

with list as (
    select 'abc' as prefix union all 
    . . . 
) 
select value, lmp 
from (SELECT value, prefix as lmp, 
      row_number() over (partition by value order by len(prefix) desc) as seqnum 
     FROM aTable join 
      list l 
      on SUBSTRING(value,1, LENGTH(prefix)) = prefix 
    ) t 
where seqnum = 1 

這將完全的循環移動到服務器上,這應該是一個快一點。

相關問題