我在面試開發人員職位時被問到這個問題。SQL Server查詢找到從城市A到城市B的所有轉接
任務:將航班路線存儲在SQL Server表寫入查詢中,該查詢將查找從城市A到城市B的所有路線,而無需轉移,只需一次或兩次轉移。例如,您有路線:
| From | To
----------------------
Los Angeles London
Los Angeles New York
New York London
Los Angeles Seattle
Seattle Paris
Paris London
而且您需要找到從洛杉磯到倫敦轉機的所有路線。結果應該是這樣的
Route
------------------------
Los Angeles->London
Los Angeles->New York->London
Los Angeles->Seattle->Paris->London
我的解決辦法是這樣的
select [From] + '->' + [To] as [Route] from Routes where [From] = 'Los Angeles' and [To] = 'London'
union
select r1.[From] + '->' + r1.[To] + '->' + r2.[To] as [Route] from Routes as r1
join Routes as r2 on r1.[To] = r2.[From]
where r1.[From] = 'Los Angeles' and r2.[To] = 'London'
union
select r1.[From] + '->' + r1.[To] + '->' + r2.[To] + '->' + r3.[To] as [Route] from Routes as r1
join Routes as r2 on r1.[To] = r2.[From]
join Routes as r3 on r2.[To] = r3.[From]
where r1.[From] = 'Los Angeles' and r3.[To] = 'London'
作品,但看起來不是很好,如果我們需要找到與3,4,5或更多的轉移途徑,我們需要添加具有更復雜選擇的新工會。
對於這個特殊的例子,這很好,因爲人們通常對超過2次轉機的航班不感興趣。但總的來說,我認爲這個查詢可能會更好看。也許有人可以用更一般的查詢來解決這個任務。謝謝。
如果你不知道:如果您在樣本數據添加西雅圖到洛杉磯的航線你得到一個意外的結果:'LA-> Seattle-> LA-> London' –
正確,所以我的面試解決方案甚至有一個bug。下面的解決方案也適用於這種情況。謝謝 –