2

我有一个查询,它由两个选择语句组成,中间有一个联合。这适用于我需要它。但是,缺少一个值,我想手动输入。我正在寻找的是:

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

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

4

4 回答 4

6

您需要继续选择:

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

该名称dual在 Oracle 中用于具有一行(和一列)的表。根据您使用的 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代替dual等),或者您可以从任何其他带有查询的表中进行选择这是保证一排。也可能有使用 VALUES 子句的方法。

注意从双引号到单引号的变化。在严格的标准 SQL 中,双引号包含分隔标识符,但单引号包含字符串。

于 2013-08-31T00:00:31.427 回答
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
于 2013-08-31T00:00:07.030 回答
1

从你的问题我猜你只想选择那一行,而不是插入它(到数据库中):

select * from tab1
union
select * from tab2
union
select "John", cast('2013-01-01' as date), "Jim", 130
于 2013-08-31T00:00:35.013 回答
0

我担心联合必须引用一个表,如果您需要添加数据库中不存在的数据,请尝试以下操作:

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 等)。

祝你好运!

于 2014-07-08T12:55:10.610 回答