Sql 在执行联接时,是否有方法重命名两个表中名称相似的列?
我有两个表,我正在加入以下查询Sql 在执行联接时,是否有方法重命名两个表中名称相似的列?,sql,sql-server,sql-server-2005,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中类似名称的列。我想在联接表中替换的列数很少,不应该
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
但这会创建一个非常长的选择p.a,p.b,p.c,p.d。。。等等…
我正试图避免
总之,我试图从Partners
表中获取多个列,并从OrganizationMembers
表中获取最多3个列,而不必在查询开始时使用长列规范序列。这是可能的还是我只是在做梦
select om.MemberID as mem
使用th作为关键字。这称为别名。尝试以下方法:
p.*,
om.EmailAddress,
om.FirstName,
om.LastName
但是,您不应该使用
*
。始终指定您实际需要的列可以更容易地了解发生了什么。您在实现中做梦
此外,作为一种最佳实践,select*通常是DBA不赞成的
如果您想限制结果或更改任何内容,您必须明确命名结果,作为潜在的“权宜之计”,您可以这样做
SELECT p.*, om.MemberId, etc..
但这仅在需要第一个表中的所有列,然后是选定项时才有效
但这会产生一个很长的序列
选择p.a、p.b、p.c、p.d等
…这是我试图避免的
不要逃避,拥抱它
明确列出所需的列是最佳实践的原因有很多
- 搜索使用特定列的位置更容易
- 对于试图维护查询的人来说,查询的行为更为明显
- 向表中添加列不会自动更改查询的行为
- 从表中删除一列将更早地中断查询,使bug看起来更接近源代码,更容易查找和修复
使用该查询的任何内容都必须列出所有列,因此懒散是没有意义的!Select*是非常糟糕的做法您提供了一些非常有说服力的论据Jeff。看起来我将列出我需要的列。我想是时候起床了。我不知道使用“Select”会让人如此不悦*“但我可以肯定地看到原因。谢谢你的建议,米切尔。