mysql - 如何支持基于 MySQL 中插入的数据创建新列
问题描述
我是新手,MySQL
并试图找到一种方法来处理dynamic
基于插入数据的列创建。例如,如果我在下表中插入一些数据,与 aa 相关的特定数据将进入dummy_{specific extension
} 列,即dummy_aa
. 也一样dummy_bb
create table dummy(
id INT,
dummy_aa VARCHAR(100),
dummy_bb VARCHAR(100),
dummy_age VARCHAR(100),
PRIMARY KEY (id)
);
insert into dummy values
(1, aa, 15),
(2, aa, 17),
(3, bb, 18),
(4, bb, 19);
但是,当我要插入不同名称的新数据时,如下所示,我希望该cc
值进入dummy_cc
存在的列。
insert into dummy values (5, cc, 20)
什么可能是在 MySQL 中创建动态列而不影响性能的最佳方法,以及在每次插入之前检查列是否存在的最佳方法(我不确定是否存在更好的方法然后检查列是否存在) .
解决方案
这里的一般答案是dummy_aa
,dummy_bb
等列可能甚至不应该存在。相反,请使用此架构:
CREATE TABLE dummy (
id INT,
dummy_code VARCHAR(100),
dummy_group INT,
dummy_age INT,
PRIMARY KEY (id)
)
也就是说,为虚拟类型/代码保留一列。然后您的 4 个样本插入将变为:
INSERT INTO dummy VALUES (1, 1, 'aa', 15);
INSERT INTO dummy VALUES (2, 1, 'aa', 17);
INSERT INTO dummy VALUES (3, 2, 'bb', 18);
INSERT INTO dummy VALUES (4, 2, 'bb', 19);
现在,当您想要查看虚拟类型的单独列时,请执行数据透视查询:
SELECT
dummy_group,
MAX(CASE WHEN dummy_code = 'aa' THEN dummy_age END) AS dummy_aa,
MAX(CASE WHEN dummy_code = 'bb' THEN dummy_age END) AS dummy_bb
FROM dummy
GROUP BY
dummy_group;
推荐阅读
- google-cloud-storage - list_blobs_with_prefix() 带有前缀参数的正则表达式
- r - 通过 mutate case_when 通过多个条件创建新变量
- javascript - 我如何选择与猫鼬的收藏?
- python - 有没有办法从我的 Python 脚本中获取所需的确切数据
- google-apps-script - 在不同工作表上的 2 个值之间搜索匹配项,并使用 google app 脚本将另一列中的数据检索到第一张工作表中
- r - R - dplyr。具有类似于数据框列的变量的函数
- javascript - Angular:如何在 Dragula ng2 上动态更改放置的元素?
- php - Nginx 超时。502错误的网关。拉拉维尔。从上游读取响应标头时由对等方重置连接
- android - 如果用户离开活动,则取消倒数计时器(Kotlin)
- javascript - 反应钩子,每个状态值一个钩子?