2014-03-19 50 views
0

Backstory:爲了幫助我的應用程序快速計算兩個拉鍊(以及Google Map的距離)之間的烏鴉距離,我將數據存儲在表基本上有三列:ZipCode1,Zipcode2Distance使用唯一的「對」(郵編)填充數據庫表的最快方法

我在我的數據庫中有另一個名爲Zipcodes的表,其中包含美國的所有郵政編碼。

我想「預先填寫」我的距離表與所有唯一的「對」的郵政編碼。由於我不想重複對,所以ZipCode1的整數值應該始終小於ZipCode2

所以,這讓我很難找出最快/最好的方法來做到這一點。如果還有一種方法可以重新運行該方法以添加缺少的對,則可以獲得獎勵積分。如果我在C#中編寫這個代碼,它會被寫出來,但會運行得非常慢(據我所知)。必須有一些更快的方法,可能通過直接的SQL?

任何幫助/想法表示讚賞。

+0

*獎勵積分*?你會在這個問題上提供賞金嗎?在C#中使用* –

+0

*,它會被寫出來,但會運行得非常慢*不,它會運行得非常快,如果你一次插入數據。 –

+0

'ZipCode1的值應該總是小於ZipCode2'爲此設置一個檢查約束。填寫'ZipCode2/ZipCode1'中的數據;如果你有所有的數據,然後做一個批量插入;將是最快捷的方式。 – Rahul

回答

1

嘗試下面的查詢,它應該產生的所有對,他們都插入到目標表中一氣呵成:

INSERT INTO ZipcodePairs (Zipcode1, Zipcode2) 
SELECT z1.Zipcode, z2.Zipcode 
    FROM Zipcodes z1 
    JOIN Zipcodes z2 ON (z1.Zipcode < z2.Zipcode); 
1

嘗試......

INSERT INTO YOUR_DISTANCE_TABLE 
(ZIPCODE1, ZIPCODE2) 
SELECT A.ZIPCODE, B.ZIPCODE FROM ZIPCODES A 
CROSS JOIN ZIPCODES B 
WHERE A.ZIPCODE<B.ZIPCODE 
相關問題