Sql 查询双表和UNION ALL

Sql 查询双表和UNION ALL,sql,oracle,Sql,Oracle,我有一个问题,如下所示 SELECT 1 AS SI, 'JAN' AS MoN FROM DUAL UNION ALL SELECT 2, 'FEB' FROM DUAL UNION ALL SELECT 3, 'MAR' FROM DUAL UNION ALL SELECT 4, 'APR' FROM DUAL UNION ALL SELECT 5, 'MAY' FROM DUAL UNION ALL SELECT 6, 'JUN' FROM DUAL UNION A

我有一个问题,如下所示

 SELECT 1 AS SI, 'JAN' AS MoN FROM DUAL
 UNION ALL
 SELECT 2, 'FEB' FROM DUAL
 UNION ALL
 SELECT 3, 'MAR' FROM DUAL
 UNION ALL
 SELECT 4, 'APR' FROM DUAL
 UNION ALL
 SELECT 5, 'MAY' FROM DUAL
 UNION ALL
 SELECT 6, 'JUN' FROM DUAL
 UNION ALL
 SELECT 7, 'JUL' FROM DUAL
 UNION ALL
 SELECT 8, 'AUG' FROM DUAL
 UNION ALL
 SELECT 9, 'SEP' FROM DUAL
 UNION ALL
 SELECT 10, 'OCT' FROM DUAL
 UNION ALL
 SELECT 11, 'NOV' FROM DUAL
 UNION ALL
 SELECT 12, 'DEC' FROM DUAL ;
请您在这里提供任何最佳替代方案或性能改进吗?

试试看

SELECT
  LEVEL AS ID,
  TO_CHAR(ADD_MONTHS(DATE '1000-01-01', LEVEL-1), 'MON') 
FROM DUAL 
CONNECT BY LEVEL <= 12;
试试看


它尽可能地简单。我认为应该将其存储在表中。Oracle缺少标准SQL的值构造函数,因此笨拙的选择。。。从双重联盟所有。。。这是我们必须使用的。您可以在这里投票支持在未来版本中使用值构造函数:它尽可能简单。我认为应该将其存储在表中。Oracle缺少标准SQL的值构造函数,因此笨拙的选择。。。从双重联盟所有。。。这是我们必须使用的。您可以在这里投票支持在未来版本中使用值构造函数:做得好。如果您想要英文缩写,您应该添加“NLS_DATE_LANGUAGE=English”作为TO_CHAR的第三个参数。您错误地添加了LEVEL而不是LEVEL-1。为了便于阅读,我用日期文字替换了转换为日期的字符串leteral。做得好。如果您想要英文缩写,您应该添加“NLS_DATE_LANGUAGE=English”作为TO_CHAR的第三个参数。您错误地添加了LEVEL而不是LEVEL-1。为了便于阅读,我用日期文字替换了转换为日期的字符串leteral。