是否可以从表中选择一个字段,但是在select语句中使用新值覆盖它?

时间:2013-09-27 16:52:53

标签: teradata

我正在创建一个这样的视图:

让我说我原来有这个:

select * from mydb.mytable

mydb.mytable有一个名为FirstName的字段,但我想在select语句中转换它的值。从概念上讲,我想这样做:

select *, upper(firstname) firstname from mydb.mytable

问题是*已经返回FirstName,因此在select中添加另一个同名的列会破坏SQL。为了使它工作,我必须列出这样的每个字段:

select upper(firstname) firstname, lastname, city, state, zip

这只是一个例子,但我真正想要使用它的表有30多列。我不喜欢必须列出每一列的想法,因为在表中添加一个新字段意味着我必须修改SQL(顺序字段位置无关紧要)。

2 个答案:

答案 0 :(得分:1)

嗯,这就是SQL的设计方式,它不是特定的Teradata问题。

你想要“select * but firstname”之类的东西,而DBMS没有实现这样的语法。

顺便说一句,(我的)基本SQL规则之一是:永远不要写“SELECT *”: - )

答案 1 :(得分:0)

正如dnoeth所说,这就是SQL的工作方式。另外,我强调他关于从不使用select *的评论,特别是在视图中。

为了解决这样的问题,我保留了表并在代码中查看DDL。每当更改表定义时,都会同时更改视图定义。这样,无论何时在表格中添加或删除列(您所关注的问题),您的视图始终保持最新状态。