使用Union with Insert添加一行

时间:2013-08-30 23:56:50

标签: sql union teradata

我有一个查询,它由两个select语句组成,中间有一个union。 这适用于我需要它。 但是,我想手动输入一个值丢失。 我期待的是:

select * from tab1
union
select * from tab2
union
insert values('John',cast('2013-01-01' as date), 'Jim', 130)

不幸的是,这不起作用。有人可以建议我这样做吗? 我正在使用Teradata。

4 个答案:

答案 0 :(得分:6)

您需要继续选择:

select * from tab1
union
select * from tab2
union
select 'John', cast('2013-01-01' as date), 'Jim', 130 from dual

在Oracle中,名称dual用于包含一行(和一列)的表。根据您使用的DBMS,您可以完全省略最终的FROM(并且您也可以在Oracle中执行此操作):

select * from tab1
union
select * from tab2
union
select 'John', cast('2013-01-01' as date), 'Jim', 130

或者您可能必须从系统目录表中进行选择并确保返回一行(FROM systables WHERE tabid = 1是Informix中的经典机制,但您也可以使用'sysmaster':sysdual而不是{{1}也可以,或者你可以从任何其他表中选择一个保证一行的查询。有可能使用VALUES子句来实现它。

请注意从双引号到单引号的更改。在严格的标准SQL中,双引号括起一个分隔标识符,但单引号括起来。

答案 1 :(得分:1)

您只想SELECT数据,而不是INSERT

对TeraData不是很熟悉,也许你需要FROM,在这种情况下限制为1条记录也是有意义的:

select * from tab1
union
select * from tab2
union
SELECT 'John',cast('2013-01-01' as date), 'Jim', '130' FROM dbc.columns 1

答案 2 :(得分:1)

从你的问题我猜你只想 SELECT 那行,而不是 INSERT 它(进入数据库):

select * from tab1
union
select * from tab2
union
select "John", cast('2013-01-01' as date), "Jim", 130

答案 3 :(得分:0)

我很害怕union必须引用一个表,如果你需要添加数据库中不存在的数据,试试这个:

select * from tab1
union
select * from tab2
union
select * from (SELECT 'John' as col1 ,cast('2013-01-01' as date) as col2, 'Jim' as col3, '130' as col4) dummy

当然,您必须更改列的名称以适合您的数据库(即不要使用col1,col2等)。

祝你好运!