有没有办法使用 mysql 脚本根据结果集为表创建多个新列

发布于 2025-01-04 16:10:41 字数 300 浏览 0 评论 0原文

我想为语言表中的每种语言类型创建一个新列。

因此可以通过以下方式找到每种语言:从语言中选择代码;

对于每种语言代码,我希望在另一个表中添加一个新列。

我会手动运行

alter table blah add column text_en_GB; 更改表等等添加列text_fr_FR; ...

我希望我可以使用以下方式构建查询: 从语言中选择 concat ("alter table blah add column text_", code, ";\n"); 然后准备并执行它,但这不适用于语句块。 :(

I want to create a new column for each language type in a language table.

so each language can be found with: select code from languages;

For each language code I want a new column in another table..

Manually I would run

alter table blah add column text_en_GB;
alter table blah add column text_fr_FR;
...

I hoped I could build queries using:
select concat ("alter table blah add column text_", code, ";\n") from languages;
then prepare and execute this but that doesn't work with a block of statements. :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沫雨熙 2025-01-11 16:10:41

您应该查看 CURSORS

您可以定义一个过程,为 SELECT 语句(提取您需要的所有语言)打开游标,并在游标的 LOOP 内部执行以下操作: ALTER TABLE ADD COLUMN 使用您要提取的所需字符串;)

您可以找到一些示例此处

You should take a look at CURSORS .

You can define a procedure that opens a cursor for a SELECT statement (the one that extract all the languages that you need) and the inside the LOOP of the cursor you do an ALTER TABLE ADD COLUMN with the desired strings that you are extracting ;)

You can find some examples here

浊酒尽余欢 2025-01-11 16:10:41

找到了更好的方法:-)

SET SESSION group_concat_max_len = 1000000;
SELECT CONCAT('ALTER TABLE blah ', GROUP_CONCAT( CONCAT('ADD COLUMN `blah_name_', `language_code`, '` varchar(255) NOT NULL') SEPARATOR ", "), ";" ) FROM `language` INTO @poo;
PREPARE stmt1 FROM @poo;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

Found a better way :-)

SET SESSION group_concat_max_len = 1000000;
SELECT CONCAT('ALTER TABLE blah ', GROUP_CONCAT( CONCAT('ADD COLUMN `blah_name_', `language_code`, '` varchar(255) NOT NULL') SEPARATOR ", "), ";" ) FROM `language` INTO @poo;
PREPARE stmt1 FROM @poo;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文