1

我正在创建这样的视图:

假设我最初有这个:

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(序数字段位置无关紧要)。

4

2 回答 2

1

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

您想要“选择 * 但名字”之类的东西,但没有 DBMS 实现了这样的语法。

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

于 2013-09-27T21:48:41.060 回答
0

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

为了解决这样的问题,我将表和视图 DDL 一起保存在代码中。每当您更改表定义时,您都会同时更改视图定义。这样,每当您从表中添加或删除列(您声明的关注点)时,您的视图始终保持最新。

于 2013-09-27T22:47:09.667 回答