Oracle如何从dual表查询带别名的两行两列模拟数据
Oracle构造多行模拟数据解决方案
原SQL错误原因
- dual是Oracle内置的仅返回1行的虚表,单次查询dual只能得到1行结果
- 你将两个姓名、两个手机号都放在同一段SELECT的字段列表中,会得到1行4个字段的结果,同时还会出现name、phone字段重名的语法问题
方案1:UNION ALL 拼接(兼容性最优,适合少量模拟数据)
该方法逻辑直观,所有Oracle版本均支持,是最常用的少量模拟数据构造方案:
SELECT 'John' AS name, '1234' AS Phone FROM dual UNION ALL SELECT 'Mary' AS name, '4321' AS Phone FROM dual;
方案2:CONNECT BY 批量构造(适合多行模拟数据场景)
如果后续需要生成更多行模拟数据,可以用CONNECT BY语法避免重复书写UNION ALL:
SELECT DECODE(LEVEL, 1, 'John', 2, 'Mary') AS name, DECODE(LEVEL, 1, '1234', 2, '4321') AS Phone FROM dual CONNECT BY LEVEL <= 2;
两种方案执行后均可得到你预期的输出结果:
name Phone ---- ----- John 1234 Mary 4321
内容的提问来源于stack exchange,提问作者user5507535
相关产品推荐
相关产品推荐

