MySQL能否在SELECT语句中添加虚构列并指定默认值?
在MySQL中添加虚构列与创建虚构行的方法
当然可以!你想要的在查询结果里添加表中不存在的虚拟列,甚至创建完全虚构的行,都是MySQL支持的操作,下面分两种情况给你说明:
一、给现有行添加虚构列
你提到的写法接近正确,但需要调整语法——直接写fictional_val = 3会被MySQL当成布尔判断(检查是否有这个列等于3,没有的话返回0),正确的方式是用AS关键字来指定虚拟列的名称:
SELECT *, 3 AS fictional_val FROM `table` WHERE id = 1;
执行这条语句后,返回的结果就会和你期望的一样:
| ID | SOM_VAL | fictional_val |
|---|---|---|
| 1 | 2 | 3 |
如果觉得AS麻烦,在MySQL里也可以省略它,直接写成SELECT *, 3 fictional_val FROM table WHERE id =1;,效果是一样的,但加上AS会让语句可读性更强,推荐使用。
二、创建完全虚构的行(表中不存在的行)
如果你的需求是生成表中根本不存在的行(比如ID=2没有数据,但要返回虚构的该行),可以通过两种方式实现:
方法1:使用MySQL的DUAL虚表
DUAL是MySQL提供的一个虚拟表,专门用来执行不依赖实际表的查询,写法如下:
SELECT 2 AS ID, 4 AS SOM_VAL, 3 AS FICTIONAL_VAL FROM DUAL;
这条语句会直接返回你定义的虚构行,不需要依赖任何实际数据表。
方法2:用UNION ALL合并现有行与虚构行
如果你想同时返回现有数据和虚构行,可以用UNION ALL把两个查询结果合并:
-- 现有行 SELECT ID, SOM_VAL, 3 AS FICTIONAL_VAL FROM `table` WHERE ID = 1 UNION ALL -- 虚构行 SELECT 2 AS ID, 4 AS SOM_VAL, 3 AS FICTIONAL_VAL FROM DUAL;
注意:使用UNION或UNION ALL时,两个查询的列数必须一致,且对应列的数据类型要匹配,否则会报错。
内容的提问来源于stack exchange,提问作者Pavel K
相关产品推荐
相关产品推荐

