Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在执行联接时,是否有方法重命名两个表中名称相似的列?_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

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”会让人如此不悦*“但我可以肯定地看到原因。谢谢你的建议,米切尔。