2013-05-06 64 views
0

我有一個表lang_namecountry_name列。INSERT INTO從表複製到另一個

在這個表我的國家就像一個清單:

English ANDORRA 
English UNITED ARAB EMIRATES 
English AFGHANISTAN 

我需要格式化這個在country_names

id English Spanish French Italian 
1 BRAZIL BRAZIL BRÉSIL BRASILE 

我試圖用這樣的事情,這工作aonly一種語言

INSERT INTO co_names (English) 
SELECT country_name 
FROM ulkeler 
WHERE lang_name = 'English' 

當我更改爲

INSERT INTO co_names (Spanish) 
SELECT country_name 
FROM ulkeler 
WHERE lang_name = 'Spanish' 

它說的工作,但,當我檢查我沒有看到西班牙的一部分的任何記錄。

我創建表是這樣的

CREATE TABLE `co_names` (
    `id` int(11) NOT NULL, 
    `English` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `Spanish` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `French` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `German` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `Italian` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `Portugues` varchar(255) CHARACTER SET utf8 NOT NULL, 
    `Turkish` varchar(255) CHARACTER SET utf8 NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

你可以看到我的ulkeler分貝爲csv這裏。 http://www.mytiq.net/multilanugage country.csv

+1

因爲其他列有NOT NULL約束,所以'INSERT'都不會起作用。 – davmos 2013-05-06 12:33:16

+0

所以我必須更改爲DEFAULT NULL? – 2013-05-06 12:36:18

+0

我不這麼認爲。但是我們需要在'ulkeler'表中添加另一列,以便將這些國家連接起來。 'country_id'。有一個嗎? – davmos 2013-05-06 12:41:54

回答

0
INSERT INTO co_names 
(
id, English, Spanish, French, German, Italian, Portugues, Turkish 
) 
SELECT CONVERT(country_numeric_code, UNSIGNED), 
IFNULL((SELECT MAX(country_name) FROM ulkeler WHERE u.lang_name = 'ENGLISH'), 'Unknown'), 
IFNULL((SELECT MAX(country_name) FROM ulkeler WHERE u.lang_name = 'SPANISH'), 'Unknown'), 
IFNULL((SELECT MAX(country_name) FROM ulkeler WHERE u.lang_name = 'FRENCH'), 'Unknown'), 
IFNULL((SELECT MAX(country_name) FROM ulkeler WHERE u.lang_name = 'GERMAN'), 'Unknown'), 
IFNULL((SELECT MAX(country_name) FROM ulkeler WHERE u.lang_name = 'ITALIAN'), 'Unknown'), 
IFNULL((SELECT MAX(country_name) FROM ulkeler WHERE u.lang_name = 'PORTUGUESE'), 'Unknown'), 
IFNULL((SELECT MAX(country_name) FROM ulkeler WHERE u.lang_name = 'TURKISH'), 'Unknown') 
FROM ulkeler u 
GROUP BY country_numeric_code; 

注意在co_names表中的 '葡萄牙' 列(缺少最後的 'e')的拼寫錯誤。

0

原始數據結構有問題,因爲您無法將行綁在一起。因此,你有一行是「ENglish」,「美國」,「另一個是」法國「,」Etats-Unis「,另一個是」西班牙「,Estados Unidos」。你怎麼知道這些是同一個國家?

如果你有一個國家標識符,你想查詢是很容易的:

select countryId, 
     max(case when lang_name = 'Englist' then co_name end) as English, 
     max(case when lang_name = 'French' then co_name end) as French, 
     . . . 
from ulkeler 
group by countryId 

我擔心你會這樣說「好了,他們被插入到表中相同的順序每種語言「。這很好。但是SQL表本質上是無序的。所以,你不能使用排序。

如果我面對這些數據,我可能會將數據導入到Excel中,重新排列列,然後重新導入數據庫。另一種選擇是將數據導入到具有自動增量選項的表格中。然後,您可能會獲得排列行所需的信息。

+0

我有國家數字代碼和國家allways是在相同的順序 – 2013-05-06 13:11:31

+0

ımportingexcel;我可以做只爲幾種語言,但我的目標是超過十種語言 – 2013-05-06 13:21:37

0

有沒有像'0行插入'的消息。插入後呢?運行SQL查詢SELECT country_name FROM ulkeler WHERE lang_name = 'Spanish'查詢選擇查詢的結果。也許是因爲lang_name = 'Spanish'沒有結果。如果發生了,那麼你只需在ulkeler表中的lang_name列中有'Spanish'insert new record

+0

當我運行西班牙語後英文它寫入行後英文。我需要SE塔旁英語 – 2013-05-06 13:19:35

+0

所以在你的ulkuler表中,也有這樣的數據: 英語安道爾 英語UNITED ARAB EMIRATES 英語阿富汗 西班牙語ANDORRAinSpanish 西班牙UNITED ARAB EMIRATESinSpanish 西班牙AFGHANISTANinSpanish 那麼你要使它如: English |西班牙文 ANDORRA ANDORRAIN西班牙文 阿富汗阿富汗尼西班牙文 ???如果這是真的,那麼我認爲你需要首先重建你的ulkuler表,因爲它會讓人感到困惑,我們不知道哪一個與另一個匹配 – kayla 2013-05-06 13:37:39

+0

english阿拉伯聯合酋長國西班牙人阿拉伯聯合酋長國阿拉伯聯合酋長國和阿拉伯聯合酋長國國家/地區代碼 – 2013-05-06 13:40:32