我們假設我們有一個表邊界(country1,country2)包含兩個彼此相鄰的國家,例如。 (瑞典,挪威)等。我想找到所有可以從特定國家到達的國家,比如說瑞典,只使用過境。PostgreSQL遞歸
這裏是我的解決方案的第一部分:
WITH RECURSIVE border(countryin) AS (
select distinct country
from (select country2::character varying(4) as country
from borders where country1 = 'S'
union
select country1::character varying(4) as country
from borders where country2 = 'S') a
UNION
select distinct sp.country::varchar(4)
from (select country1::varchar(4) as country, country2 as n
from borders) sp
join (select country2::varchar(4) as country, country1 as n, countryin as temp
from borders, border) st
on sp.country = st.n
and sp.country in st.temp
where true
)
SELECT distinct countryin, name
FROM border, country
where countryin = code ;
,我不能去工作的唯一的事情就是如何讓在結果邊境表存在一個特定的國家設置的約束。我嘗試在st.temp和其他幾種方法中使用和sp.country,但是我無法使其工作。
有人能告訴我如何解決這個問題嗎?
當前結果:
- 現在,我得到一個錯誤,指出「 錯誤:語法錯誤或接近 」ST「 線4:... S,邊框)ST上SP。國= st.n和sp.country在st.temp 「
期望的結果
- 列出可以使用從'S'開始的邊界以遞歸方式到達的所有縣。因此,如果我們有(S,N),(N,R),(R,C),(D,A),我們將得到:(N,R,C)
我不明白這個問題,你能提供一個當前結果和慾望輸出的例子嗎?請閱讀http:// stackoverflow。com/help/how-to-ask 這裏是[** START **]的好地方(http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question -on-a-public-forum /) –
@JuanCarlosOropeza,完成! – Artem