Sql 如何按顺序添加两列(而不是连接)?

Sql 如何按顺序添加两列(而不是连接)?,sql,oracle,Sql,Oracle,我试图从Oracle SQL数据库中提取两个表,并希望按顺序将它们连接起来,这样它们看起来就像是一个列表 列表一包含项目[1,2,3,4] 列表二有项目[a、b、c、d] 我想输出[1,2,3,4,a,b,c,d] 有什么想法吗?一个选项使用带有计算列的联合: SELECT val FROM ( SELECT val, 1 AS position FROM table1 UNION ALL SELECT val, 2 AS position FROM table2 ) t

我试图从Oracle SQL数据库中提取两个表,并希望按顺序将它们连接起来,这样它们看起来就像是一个列表

列表一包含项目
[1,2,3,4]
列表二有项目
[a、b、c、d]
我想输出
[1,2,3,4,a,b,c,d]


有什么想法吗?

一个选项使用带有计算列的
联合:

SELECT val
FROM
(
    SELECT val, 1 AS position FROM table1
    UNION ALL
    SELECT val, 2 AS position FROM table2
) t
ORDER BY
    position, val;


注意,我假设这里的所有数据都是文本。如果不是,例如,第一个表是数字的,那么我们将不得不进行转换。但是,这并不是你问题的主要焦点。

使用union,我认为1,2,3作为数值,这就是为什么在
varchar上转换它的原因。对于union,你必须使用相同的数据类型

with t1 as (
    select 1 as id from dual union all
    select 2 from dual union all
    select 3 from dual union all
    select 4 from dual
), t2 as (
    select 'a' as item from dual union all
    select 'b' from dual union all
    select 'c' from dual union all
    select 'd' from dual
)
select cast(id as varchar(20)) as id from t1
union
select * from t2

如果列的类型不同-请确保将它们强制转换为char()-结果类型应相同。

的可能重复除非OP希望删除重复值,否则应使用UNION ALL
。他的示例没有包含重复的值,但请注意答案中的差异可能会有所帮助。@PatrickH valid point,这就是我添加oracle文档链接的原因。除非OP希望删除重复值,否则应使用
UNION ALL
。他的示例中没有重复的内容,但请注意答案中的差异可能会有所帮助。@PatrickH我根据样本数据进行了回答,没有重复的机会使用
UNION
over
UNION ALL
没有任何好处,除非您试图删除重复内容。使用后者也是一种性能提升。即使您的答案适用于他的样本数据,但如果他的实际数据确实包含重复数据,您的查询也会做额外的不必要的工作,这可能会导致问题。
output
1
2
3
4
a
b
c
d
SELECT id_1, value_column1 from table_1
  UNION
    SELECT id_2, value_column2 from table_2;