0

我有一个带有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

4

3 回答 3

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”)。

于 2013-05-06T17:54:44.063 回答
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,重新排列那里的列,然后重新导入数据库。另一种选择是将数据导入具有自动增量选项的表中。然后,您可能拥有排列行所需的信息。

于 2013-05-06T13:01:29.103 回答
0

是否有任何消息,如“插入 0 行”。插入之后呢?运行 SQL 查询SELECT country_name FROM ulkeler WHERE lang_name = 'Spanish'以检查选择查询的结果。也许是因为lang_name = 'Spanish'没有结果。如果发生这种情况,那么您只是insert new record在表的 lang_name 列中有“西班牙语” ulkeler

于 2013-05-06T13:08:04.193 回答