2013-03-09 19 views
2

我有一個表試圖採取兩個整數國家代碼(起源和目的地),並用實際的兩個字母的國家代碼取代這些整數代碼,同時保持從第二張桌子。SQL查詢語句顯示與多個表相同的列類型

下面是這兩個表的一個例子

國家代碼:

integerCode twoDigitCode fullName 
    0   US  United States 
    1   BE  Belgium 
    2   CN   China 
    ... 

區:

origin destination col3 col4 
    0  1  x y 
    0  2  z a 
    1  2  u b 
    2  0  x x 
    2  1  i f 
    ... 

我試圖做的是獲得結果如下所示:

origin destination col3 col4 
    US  BE  x y 
    US  CN  z a 
    ... 

我已經嘗試了幾個不同的SQL查詢這樣

SELECT twoDigitCode as origin, twoDigitCode as destination 
FROM country INNER JOIN Zone ON zone.destination = country.twoDigitCode 
WHERE zone.origin = country.twoDigitCode 

,但它似乎只是不斷重複的結果從兩個看上去跌宕。

我的第一個問題是我甚至可以做我想用SQL查詢做什麼?第二是有一個很好的例子或網站可以解釋我如何能夠實現這樣的結果。

任何幫助將不勝感激。

回答

0

你需要加入的國家代碼表中的每個2查找列:

SELECT co.twoDigitCode as origin, cd.twoDigitCode as destination, z.col3, z.col4 
FROM zones z 
INNER JOIN country co ON country.integerCode = z.origin 
INNER JOIN country cd ON country.integerCode = z.destination 

[注:如果origindestination列是可空的,你可以使用一個左連接的內部,而不是加盟]

+0

這樣做。 oldDHLRates是我工作的表的臨時表名。我更新了問題陳述,不要混淆別人。所以我只是錯過了一個連接?我以爲我嘗試過,但我想我錯過了:)。感謝你及時的答覆! – 2013-03-09 00:19:36

0

你只需要兩個單獨的連接:

SELECT c1.twoDigitCode origin, c2.twoDigitCode destination, z.col3, z.col4 
FROM Zones z 
JOIN Country c1 ON c1.integer.code=z.origin 
JOIN Country c2 ON c2.integer.code=z.destination 
0

好吧,你要創建一個查詢,將從區域「填充」每個記錄通過將其各自的origindestination組件替換爲其對應的兩位數國家代碼。換句話說,您正在解碼原始和目標數據。您可以兩次在區域表上執行加入:一次填寫原點,第二次填入目的地。

你可以把它分解成兩個查詢:

  1. 解碼的起源與國家代碼表中加入了區表。 例如

    SELECT * 
    FROM Zones, Country Codes 
    WHERE origin = integerCode 
    

    這產生其中每一行包含以下各列的臨時表:

    (出發地,目的地,COL3,COL4,integerCode,twoDigitCode,全名)

  2. 譯碼使用相同的目的地處理。即,再次使用國家代碼表從第1步創建的表,但是這次WHERE子句應該將目標與integerCode匹配。

免責聲明:我是學生,不是專家。我沒有聲明我的解決方案的效率,準確性或正確性。