2012-05-21 47 views
0

這是一個很微妙的問題,但我會給我最好要清楚:檢索同一表中的列具有相同的外鍵,但不同的價值觀

我有一個表countrynames 3列:ISO ,郎,名。 這些主要的拼寫英文,例如:

+-----+------+-----------------------------+ 
| iso | lang | name      | 
+-----+------+-----------------------------+ 
| CA | EN | Canada      | 
| CC | EN | Cocos (Keeling) Islands  | 
| CF | EN | Central African Republic | 
| CG | EN | Congo      | 
| CI | EN | Cote d'ivoire (Ivory Coast) | 
| CK | EN | Cook Islands    | 
| CL | EN | Chile      | 
| CM | EN | Cameroon     | 
| CN | EN | China      | 
| CO | EN | Colombia     | 
+-----+------+-----------------------------+ 

ISO是外鍵它引用了ISO-3166編碼的國家。

我插入了一些英文拼寫的國家,但也使用其他語言只在拼寫不同於英文時,爲了節省數據庫中的一些空間(例如德語中的「德國」是「德國」,所以'DE'的iso在表中出現兩次,有兩個不同的名字)。

我需要的是選擇某些特定語言的所有國家(如德語或西班牙語),然後選擇所有使用同一列英文名稱的國家。如果在外語中沒有相應的名稱,那麼英文名稱應填寫空白字段,以便我可以混合使用英語+外語。該混合物應等於用英文拼寫的國家的總和,這樣的(空是其中的英文名稱應填寫丟失的西班牙名字,比如剛果,智利,中國,哥倫比亞):

'CA', 'ES', 'Canadá' 
'CC', 'ES', 'Islas Cocos' 
'CD', 'ES', 'República Democrática del Congo' 
'CF', 'ES', 'República Centroafricana' 
NULL, NULL, NULL 
'CH', 'ES', 'Suiza' 
'CI', 'ES', 'Costa del Marfil' 
'CK', 'ES', 'Islas Cook' 
NULL, NULL, NULL 
'CM', 'ES', 'Camerún' 
NULL, NULL, NULL 
NULL, NULL, NULL 
NULL, NULL, NULL 
NULL, NULL, NULL 

這是什麼我迄今使用:

select result2.iso, result2.lang, result2.name from (select result1.* from (select t1.* 
from (
select iso, lang, name from countrynames where lang = 'es') t1 
right join 
(select iso, lang, name from countrynames where lang = 'en') t2 
on t1.iso = t2.iso) result1) result2; 

回答

0

你原來SELECT可以簡化一點:

SELECT t1.iso, t1.lang, t1.name 
    FROM (SELECT * FROM countrynames WHERE lang = 'ES') t1 
    RIGHT JOIN (SELECT * FROM countrynames WHERE lang = 'EN') t2 
    ON t1.iso = t2.iso; 

然後,所有你需要做的就是合併列的結果,所以你retrie已經在t2值,如果沒有值t1

SELECT COALESCE(t1.iso, t2.iso), COALESCE(t1.lang, t2.lang), COALESCE(t1.name, t2.name) 
    FROM (SELECT * FROM countrynames WHERE lang = 'ES') t1 
    RIGHT JOIN (SELECT * FROM countrynames WHERE lang = 'EN') t2 
    ON t1.iso = t2.iso; 
+0

非常感謝!解決方案有時很容易找到,我們失去了尋找複雜方式來實現目標的事情的軌道:) –

相關問題