我有一个查询,它由两个select语句组成,中间有一个union。 这适用于我需要它。 但是,我想手动输入一个值丢失。 我期待的是:
select * from tab1
union
select * from tab2
union
insert values('John',cast('2013-01-01' as date), 'Jim', 130)
不幸的是,这不起作用。有人可以建议我这样做吗? 我正在使用Teradata。
答案 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等)。
祝你好运!