让我们想象一下3个表的连接,例如它有14列。我想用一个别名重命名其中一列。有没有什么办法或者做到这一点,而不必在select语句中写入其他13个列名?选择*并在一列上创建一个别名
我正在寻找在伪代码
SELECT * [rename user.login as username] from users join
(select * from statistics join accounts)
让我们想象一下3个表的连接,例如它有14列。我想用一个别名重命名其中一列。有没有什么办法或者做到这一点,而不必在select语句中写入其他13个列名?选择*并在一列上创建一个别名
我正在寻找在伪代码
SELECT * [rename user.login as username] from users join
(select * from statistics join accounts)
你提出的语法是好的,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!
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
“该列将出现两次,但没有任何可以做的事情” - 我怀疑他们想重命名该列以便执行自然联接(请注意缺少显式联接子句),当使用'SELECT *'时,它肯定能够解决列出现两次的问题。 – onedaywhen 2012-04-18 13:03:52
无论如何,您不应该在生产代码中使用'select *'。我很确定,编写13个列名的时间比写这个问题的时间少。 – 2012-04-18 12:40:05
但是他永远不会学习新东西...... – dani24 2016-03-02 13:24:56