我有一个查询,它由两个选择语句组成,中间有一个联合。这适用于我需要它。但是,缺少一个值,我想手动输入。我正在寻找的是:
select * from tab1
union
select * from tab2
union
insert values('John',cast('2013-01-01' as date), 'Jim', 130)
不幸的是,这不起作用。有人可以建议我怎么做吗?我正在使用 Teradata。
您需要继续选择:
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 中,双引号包含分隔标识符,但单引号包含字符串。
你只想要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
从你的问题我猜你只想选择那一行,而不是插入它(到数据库中):
select * from tab1
union
select * from tab2
union
select "John", cast('2013-01-01' as date), "Jim", 130
我担心联合必须引用一个表,如果您需要添加数据库中不存在的数据,请尝试以下操作:
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 等)。
祝你好运!