首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL增量列

MySQL增量列
EN

Stack Overflow用户
提问于 2016-09-04 19:23:41
回答 3查看 26关注 0票数 0

我有一张桌子如下所示:

代码语言:javascript
复制
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,Blue4812,Green7181,White4812
  • 2: Slow841C,Orange8312
  • 3: Plane281K

是否有一种方法可以使用通配符来选择像select(Prototype_*)这样的所有列,还是应该以不同的格式设置我的表?

例如,有人教我这种结构是不好的做法:

代码语言:javascript
复制
ID|Prototypes|
---------------------------------------------------
1 |Fast381A,Blue4812,Green7181,White4812 
---------------------------------------------------
2 |Slow841C,Orange8312
---------------------------------------------------
3 |Plane281K
---------------------------------------------------
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-04 19:26:07

SQL查询返回一组固定的列。如果要将非空值组合为单个列,我建议使用concat_ws()

代码语言:javascript
复制
select id,
       concat_ws(',', Prototype_A, Prototype_B, Prototype_C, Prototype_D)
from t;

这将忽略NULL值。查询返回两列,一列是原型列表。

你的问题的答案是“是的”。您应该考虑更改数据结构。有多个列存储相同的东西,仅仅有一个索引来标识它们,这通常意味着您需要一个单独的表,每个id和每个原型都有一行。

编辑:

你想要一张这样的桌子

代码语言:javascript
复制
create table ModelPrototypes (
    ModelProtypeId int primary key auto_increment,
    ModelId int not null,
    ProtoTypeChar char(1),
    Prototype varchar(255)
);

然后,您将使用如下的值填充它:

代码语言:javascript
复制
1   A    Fast381A
1   B    Blue4812
1   C    Green7181
1   D    White4812 

我不确定是否真的需要PrototypeChar,但信息在您的表中。

票数 2
EN

Stack Overflow用户

发布于 2016-09-04 19:30:42

无法使用通配符选择列。

你能做的是:

将您的表设置为

代码语言:javascript
复制
ID, Prototype_type, Prototype_name

然后使用GROUP_CONCAT

代码语言:javascript
复制
SELECT id, GROUP_CONCAT(Prototype_name SEPARATOR ',')
FROM table GROUP BY Prototype_name 
票数 0
EN

Stack Overflow用户

发布于 2016-09-04 22:17:47

"Should I setup my table in a different format?"

是。您的桌子看起来可能如下:

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39320653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档