2012-04-18 67 views
5

让我们想象一下3个表的连接,例如它有14列。我想用一个别名重命名其中一列。有没有什么办法或者做到这一点,而不必在select语句中写入其他13个列名?选择*并在一列上创建一个别名

我正在寻找在伪代码

SELECT * [rename user.login as username] from users join 
     (select * from statistics join accounts) 
+2

无论如何,您不应该在生产代码中使用'select *'。我很确定,编写13个列名的时间比写这个问题的时间少。 – 2012-04-18 12:40:05

+0

但是他永远不会学习新东西...... – dani24 2016-03-02 13:24:56

回答

3

你提出的语法是好的,IMO。事实上,这是非常相似的数据库语言Tutorial D

user RENAME (login AS username) 

将项目从user relvar所有14个属性,其中只有一个指定的重命名。

类似地,教程D具有一个投影算子,例如一个ALL BUT投影算子。

user { ALL BUT login } 

会在您的情况下产生13个属性的关系。

不幸的是,SQL从来没有这些有用的快捷方式,可能永远不会。也许我们应该认为我们自己很幸运在早期有SELECT *;我们绝不会在最近的时间内获得批准!代表SQL用户的组向SQL标准委员会提交了SELECT * BUT <commalist>类型语法的提案,但遭到拒绝。 SELECT * is disliked on SO too!

4
select users.login as username, users.* 
    from users 

不幸的是,列将出现两次,但没有什么可以做。

随着加入它会是这个样子:

select u.login as username, u.*, s.* 
    from users as u, statistics as s 
    where u.user_id = s.user_id 
+0

“该列将出现两次,但没有任何可以做的事情” - 我怀疑他们想重命名该列以便执行自然联接(请注意缺少显式联接子句),当使用'SELECT *'时,它肯定能够解决列出现两次的问题。 – onedaywhen 2012-04-18 13:03:52

相关问题