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的所有非空原型。 例如:
  • 1:Fast381A、蓝色4812、绿色7181、白色4812
  • 2:Slow841C,橙色8312
  • 3:Plane281K
  • 是否有一种方法可以通配符选择所有列,如
    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呢?