在日常的开发工作中,有时我们需要在SQL层面添加一些数据库表中没有的数据,那么我们就可以使用 UNION ALL 关键字来解决。
一、简单的无中生有:在查询返回结果中添加数据
以下方的SQL1为例,我们根据 id 查询 user 表中的数据,但想将 name = "燕双鹰"、age = 70 的数据也添加上,使用 UNION ALL 完美的解决了这个问题。
SQL1
-- SQL1, 在查询结果中添加表中不存在的数据.
SELECT
u.`name`,
u.age
FROM user u
WHERE
u.id = 4
UNION ALL
SELECT
'燕双鹰' AS name,
70 AS age
FROM DUAL
;
图一
二、复制的无中生有:根据逻辑判断,追加不同的值.
需求:这里有一个 name 模板,name值为:张三、李四、赵六, 当 user 表中含这些数据时,返回 name值 及对应的 age 值;如果表中不含 name 值,则也需要返回 name值 并将 age 值设为 0 。
这个需求依旧可以使用 UNION ALL 来解决。这个需求看起来很无厘头,但现实的工作中总有各种奇葩的需求,身为程序员的我们也是挺无奈的!!!
SQL2
SELECT
CASE WHEN u.`name` = '张三' THEN u.`name` ELSE '张三'
END AS name,
CASE WHEN u.`name` = '张三' THEN u.age ELSE 0
END AS age
FROM user u
WHERE
u.id = 5
UNION ALL
SELECT
CASE WHEN u.`name` = '李四' THEN u.`name` ELSE '李四'
END AS name,
CASE WHEN u.`name` = '李四' THEN u.age ELSE 0
END AS age
FROM user u
WHERE
u.id = 4
UNION ALL
SELECT
CASE WHEN u.`name` = '赵六' THEN u.`name` ELSE '赵六'
END AS name,
CASE WHEN u.`name` = '赵六' THEN u.age ELSE 0
END AS age
FROM user u
WHERE
u.id = 6
;