我有一个包含lang_name
和country_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
答案 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 record
在ulkeler
表的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”)。