我有一个如下表:
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 的所有非空原型(prototype)。 例如:
有没有办法通过通配符选择所有列,例如 select(Prototype_*)
或者我应该以不同的格式设置表格?
例如,我被告知这种类型的结构是不好的做法:
ID|Prototypes|
---------------------------------------------------
1 |Fast381A,Blue4812,Green7181,White4812
---------------------------------------------------
2 |Slow841C,Orange8312
---------------------------------------------------
3 |Plane281K
---------------------------------------------------
最佳答案
SQL 查询返回一组固定的列。如果您想将非 NULL 值组合到单个列中,我建议使用 concat_ws()
:
select id,
concat_ws(',', Prototype_A, Prototype_B, Prototype_C, Prototype_D)
from t;
这会忽略NULL
值。该查询返回两列,一列是原型(prototype)列表。
而且,您的问题的答案是"is"。您应该考虑更改您的数据结构。让多个列存储相同的内容,仅用一个索引来标识它们通常意味着您需要一个单独的表,每个 id 和每个原型(prototype)各一行。
编辑:
你想要一个像这样的表格:
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
是否确实需要,但信息在您的表中。
关于MySQL增量列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39320653/