只读数据库中通过UNION为Reason字段添加前缀的SQL问题
给UNION查询的Reason字段添加指定前缀的解决方案
很简单,你只需要在两个SELECT语句里分别对要返回的Reason字段做字符串拼接,把对应的前缀和原字段值连起来就行。下面分几种常见数据库的情况给你具体代码:
适用于MySQL、PostgreSQL、SQL Server 2012及以上版本
用CONCAT()函数来完成字符串拼接:
SELECT cust_id, CONCAT('Type ', creditcode) AS 'Reason' FROM publishers WHERE creditcode = 'D' UNION SELECT cust_id, CONCAT('Code ', jobtype) AS 'Reason' FROM bookjobs WHERE jobtype = 'R';
(顺便提一句:通常判断字段等于某个值用=比IS更规范,IS一般用来判断NULL或者布尔值,当然有些数据库里IS 'D'也能运行,但换成=兼容性更好)
适用于Oracle数据库
Oracle支持用||操作符直接拼接字符串:
SELECT cust_id, 'Type ' || creditcode AS 'Reason' FROM publishers WHERE creditcode = 'D' UNION SELECT cust_id, 'Code ' || jobtype AS 'Reason' FROM bookjobs WHERE jobtype = 'R';
补充说明
- 如果你的业务场景允许返回重复的记录(比如同一个
cust_id可能在两个表中都有符合条件的数据),建议把UNION换成UNION ALL,这样查询效率会更高,因为UNION会额外做一次去重操作。 - 因为是只读数据库,这些拼接操作都是在查询时计算的,不会修改原表数据,完全符合你的使用场景。
内容的提问来源于stack exchange,提问作者Floating Tiki Hut
相关产品推荐
相关产品推荐

