MySQL增量列
我有一张如下表:MySQL增量列,mysql,Mysql,我有一张如下表: ID|Prototype_A|Prototype_B|Prototype_C|Prototype_D| --------------------------------------------------- 1 |Fast381A |Blue4812 | Green7181 | White4812 | --------------------------------------------------- 2 |Slow841C |Orange8312 | null
ID|Prototype_A|Prototype_B|Prototype_C|Prototype_D|
---------------------------------------------------
1 |Fast381A |Blue4812 | Green7181 | White4812 |
---------------------------------------------------
2 |Slow841C |Orange8312 | null | null |
---------------------------------------------------
3 |Plane281K | null | null | null |
---------------------------------------------------
我需要查询返回该ID的所有非空原型。
例如:
select(Prototype_*)
,或者我应该以不同的格式设置我的表
例如,我被教导这种结构是不好的做法:
ID|Prototypes|
---------------------------------------------------
1 |Fast381A,Blue4812,Green7181,White4812
---------------------------------------------------
2 |Slow841C,Orange8312
---------------------------------------------------
3 |Plane281K
---------------------------------------------------
SQL查询返回一组固定的列。如果要将非空值合并到单个列中,我建议
concat_ws()
:
这将忽略NULL
值。查询返回两列,一列是原型列表
你的问题的答案是“是”。你应该考虑改变你的数据结构。如果有多个列存储相同的内容,并且只有一个标识它们的索引,通常意味着您需要一个单独的表,每个id和每个原型一行
编辑:
您想要这样一张桌子:
create table ModelPrototypes (
ModelProtypeId int primary key auto_increment,
ModelId int not null,
ProtoTypeChar char(1),
Prototype varchar(255)
);
然后用如下值填充它:
1 A Fast381A
1 B Blue4812
1 C Green7181
1 D White4812
我不确定是否真的需要
PrototypeChar
,但信息在您的表中。SQL查询返回一组固定的列。如果要将非空值合并到单个列中,我建议concat_ws()
:
这将忽略NULL
值。查询返回两列,一列是原型列表
你的问题的答案是“是”。你应该考虑改变你的数据结构。如果有多个列存储相同的内容,并且只有一个标识它们的索引,通常意味着您需要一个单独的表,每个id和每个原型一行
编辑:
您想要这样一张桌子:
create table ModelPrototypes (
ModelProtypeId int primary key auto_increment,
ModelId int not null,
ProtoTypeChar char(1),
Prototype varchar(255)
);
然后用如下值填充它:
1 A Fast381A
1 B Blue4812
1 C Green7181
1 D White4812
我不确定是否真的需要
PrototypeChar
,但信息在您的表中。无法通配符选择列
你能做的是:
将您的表设置为
ID, Prototype_type, Prototype_name
然后使用GROUP\u CONCAT
:
SELECT id, GROUP_CONCAT(Prototype_name SEPARATOR ',')
FROM table GROUP BY Prototype_name
无法通配符选择列 你能做的是: 将您的表设置为
ID, Prototype_type, Prototype_name
然后使用GROUP\u CONCAT
:
SELECT id, GROUP_CONCAT(Prototype_name SEPARATOR ',')
FROM table GROUP BY Prototype_name
“我应该以不同的格式设置表格吗?”
对。您的表可能如下所示:
ID Prototype_Code Prototype
------------------------------
1 A Fast381A
1 B Blue4812
1 C Green7181
1 D White4812
2 A Slow841C
2 B Orange8312
3 A Plane281K
“我应该以不同的格式设置表格吗?”
对。您的表可能如下所示:
ID Prototype_Code Prototype
------------------------------
1 A Fast381A
1 B Blue4812
1 C Green7181
1 D White4812
2 A Slow841C
2 B Orange8312
3 A Plane281K
你能给我一个单独表格的例子吗,因为我设想的是一个列数不断增加的表格。你能给我一个单独表格的例子吗,因为我设想的是一个列数不断增加的表格。看看(我不会,但也许你想)。或者使用或关联表规范化数据作为首要问题,它需要存储过程之类的东西。它将感知模式结构,将动态sql构造成一个PREPARE,然后执行它。由于开销的原因,速度会很慢。原型e呢?看看(我不会,但也许你想)。或者使用或关联表规范化数据作为首要问题,它需要存储过程之类的东西。它将感知模式结构,将动态sql构造成一个PREPARE,然后执行它。由于开销的原因,速度会很慢。原型e呢?