2011-06-16 31 views
7

我想使用select *来选择表中的所有字段,但我也想在一个字段上使用别名。可能吗?如果是这样,语法是什么。选择*与特定的别名[语法]

select *, 
item1 as hats 
from factory 

我一直没能做出这样的事的工作,谢谢!

+1

您不需要命名所有字段。 OP的语句是有效的,因为'select col1,col2 as mycol from mytable'至少在我知道的所有SQL实现中。 – Hyperboreus 2011-06-16 23:08:42

回答

14

我只是想

select *, item1 as hats from factory 

在MySQL和Postgres和两个DBMS运行良好。只有考虑到你会得到两个带有item1的列。一列名为item1,另一列名为帽子。

+0

是否可以删除重复? – tylercomp 2011-06-16 23:09:14

+0

你正在使用哪个DBMS? (请标记) – Hyperboreus 2011-06-16 23:17:31

+0

嗯,我不知道它为什么没有工作我正在使用SQL Server 2007我认为无论现在它的一切都好现在谢谢!重复没有实际意义,可能实际上应该在事后回想起我的问题 – tylercomp 2011-06-16 23:22:22

2

是的,可以使用该格式,但不推荐使用Select *。列举你想要的列是最好的。如果与别名列结合使用的列列表会生成重复的列名称,则某些数据库产品可能会出现问题。但是,您可以通过枚举列来解决此问题。

+0

我不信任枚举......因为在这种情况下我不理解它。你有一个例子吗? – tylercomp 2011-06-16 23:10:38

+0

@tylercomp“enumerate”=“列出列而不是使用*”。也就是说,要明确你想要的列,而不要依赖*。 – Thomas 2011-06-16 23:11:54

+0

哦,我总是想象它像上市选择1,2,3,4,5,并获得前五列......但我不认为我可以采取列出他们的路线...太多,无法立即行之有效;伤害可读性 – tylercomp 2011-06-16 23:20:58

2

这应该工作,但请记住,您的item1列将是重复!假设你的表有列(id,item1,item2),那么你的建议选择将返回(id,item1,item2,帽子)。

2

它在MS Sql Server也是有效的,但你alias'ng的列将被复制。 在Sql server 2005中尝试了查询,它确实起作用。

select *,col2 as 'customcol' from table1