如何在FROM语句中直接添加数据记录,无需使用TEMP表?
直接在查询中拼接自定义记录的实现方法
你想要的这种无需临时表、直接在查询中嵌入自定义记录的写法是可行的,但不同数据库的语法略有差异,以下是主流数据库的具体实现方式:
SQL Server
通过VALUES子句构造自定义行集,再用UNION ALL与原表数据合并:
SELECT [Employee].[ID] ,[Employee].[NAME] FROM [EMPLOYEE] UNION ALL SELECT ID, NAME FROM (VALUES (45, 'Buck Rogers'), (46, 'Twiki'), (47, 'Col Wilma Deering') ) AS CustomRecords(ID, NAME)
MySQL / MariaDB
支持直接在UNION ALL后使用VALUES子句:
SELECT `Employee`.`ID` ,`Employee`.`NAME` FROM `EMPLOYEE` UNION ALL VALUES (45, 'Buck Rogers'), (46, 'Twiki'), (47, 'Col Wilma Deering');
PostgreSQL
用VALUES子句构造行集并指定别名后,与原表合并:
SELECT "Employee"."ID" ,"Employee"."NAME" FROM "EMPLOYEE" UNION ALL SELECT * FROM (VALUES (45, 'Buck Rogers'), (46, 'Twiki'), (47, 'Col Wilma Deering') ) AS CustomRecords(ID, NAME);
关键注意点
- 自定义记录的列数量、数据类型必须和原表查询结果完全匹配,否则
UNION ALL会抛出类型不兼容的错误。 - 若需要自动去重,可将
UNION ALL替换为UNION,但这会触发额外的排序操作,非必要场景不建议使用。
内容的提问来源于stack exchange,提问作者Dominic Murtagh
相关产品推荐
相关产品推荐

