我正在创建一个这样的视图:
让我说我原来有这个:
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(顺序字段位置无关紧要)。
答案 0 :(得分:1)
嗯,这就是SQL的设计方式,它不是特定的Teradata问题。
你想要“select * but firstname”之类的东西,而DBMS没有实现这样的语法。
顺便说一句,(我的)基本SQL规则之一是:永远不要写“SELECT *”: - )
答案 1 :(得分:0)
正如dnoeth所说,这就是SQL的工作方式。另外,我强调他关于从不使用select *
的评论,特别是在视图中。
为了解决这样的问题,我保留了表并在代码中查看DDL。每当更改表定义时,都会同时更改视图定义。这样,无论何时在表格中添加或删除列(您所关注的问题),您的视图始终保持最新状态。