INSERT INTO从表复制到另一个

时间:2013-05-06 12:25:24

标签: mysql

我有一个包含lang_namecountry_name列的表格。

在此表中,我列出了以下国家/地区:

English   ANDORRA
English   UNITED ARAB EMIRATES
English   AFGHANISTAN

我需要在country_names表格

上格式化
id English Spanish French Italian
1  BRAZIL  BRAZIL  BRÉSIL  BRASILE

我尝试使用这样的东西,这只适用于一种语言

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 db为csv。 http://www.mytiq.net/multilanugage country.csv

3 个答案:

答案 0 :(得分:0)

原始数据结构存在问题,因为您无法将行绑定在一起。所以,你有一行是“ENglish,'United States'”,另一行是“French”,Etats-Unis“',另一行是”Spanish“,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,重新排列那里的列,然后重新导入数据库。另一种选择是将数据导入具有自动增量选项的表中。然后,您可能拥有排列行所需的信息。

答案 1 :(得分:0)

是否有任何消息,例如'0行已插入'。插入后呢?运行SQL查询SELECT country_name FROM ulkeler WHERE lang_name = 'Spanish'以检查选择查询的结果。也许是因为lang_name = 'Spanish'没有结果。如果它发生了那么你只是insert new recordulkeler表的lang_name列中有'西班牙语'。

答案 2 :(得分: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”)。