2013-05-06 65 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