有没有办法在执行连接时从两个表重命名一个类似命名的列?

时间:2010-03-10 16:19:21

标签: sql sql-server sql-server-2005

我有两个表,我正在加入以下查询......

select * 
  from Partners p 
inner join OrganizationMembers om on p.ParID = om.OrganizationId 
where om.EmailAddress = 'my_email@address.com' 
  and om.deleted = 0

哪个效果很好,但Partners中的一些列我希望被OrganizationMembers中类似命名的列替换。我想在连接表中替换的列数非常少,不应超过3个。

通过在结果连接中有选择地选择我想要的列,可以得到我想要的结果......

select om.MemberID, 
       p.ParID, 
       p.Levelz, 
       p.encryptedSecureToken, 
       p.PartnerGroupName, 
       om.EmailAddress, 
       om.FirstName, 
       om.LastName 
 from Partners p 
inner join OrganizationMembers om on p.ParID = om.OrganizationId 
     where om.EmailAddress = 'my_email@address.com' 
       and om.deleted = 0

但这会创建一个很长的select p.a, p.b, p.c, p.d, ... etc ...序列,我试图避免这种情况。

总之,我试图从Partners表中获取多个列,从OrganizationMembers表中获取最多3列,而在查询开头没有长列规范序列。是可能还是我只是在做梦?

4 个答案:

答案 0 :(得分:3)

select om.MemberID as mem

使用AS关键字。这称为别名。

答案 1 :(得分:2)

试试这个:

p.*,
om.EmailAddress, 
om.FirstName, 
om.LastName 

你永远不应该使用*。始终指定实际需要的列可以更容易地找出发生的情况。

答案 2 :(得分:2)

你正在实施你的梦想。

此外,作为最佳做法,选择*是DBA通常不赞成的事情。

如果你想限制结果或改变任何东西,你必须明确地命名结果,作为一个潜在的“止差距你可以做这样的事情。”

SELECT p.*, om.MemberId, etc..

但是,如果您想要第一个表中的所有列,然后选择所选项,则此仅适用。

答案 3 :(得分:2)

  

但这会产生很长的序列   select p.a,p.b,p.c,p.d,...等   ......我想避免的。

不要避免它。拥抱它!

有很多理由说明为什么最好的做法是明确列出所需的列。

  • 搜索特定列的使用位置更容易。
  • 对于试图维护它的人来说,查询的行为更为明显。
  • 向表中添加列不会自动更改查询的行为。
  • 从表格中删除列会提前破坏您的查询,从而使错误更接近来源,更容易查找和修复。

任何使用查询的东西都必须列出所有列,所以对它懒惰没有意义!