如何合并两个选择查询,从而得到一个表

asm*_*sma 0 sql asp.net merge

嗨我有两个选择查询,我想将它们合并到一个有5列的表中 Id, ClientId, Height, EyeColor, HairColor

查询是:

SELECT ClientCharacteristic.Id
     , ClientCharacteristic.ClientId
     , ClientCharacteristic.Height
     , GeneralLookup.LookupItem as EyeColor  
FROM dbo.ClientCharacteristic
  INNER JOIN dbo.GeneralLookup
    ON GeneralLookup.Id=ClientCharacteristic.glEyeColorId 



SELECT ClientCharacteristic.Id
     , ClientCharacteristic.ClientId
     , ClientCharacteristic.Height
     , GeneralLookup.LookupItem as HairColor  
FROM dbo.ClientCharacteristic
  INNER JOIN dbo.GeneralLookup
    ON GeneralLookup.Id=ClientCharacteristic.glHairColorId
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 6

通常,您使用UNION"合并"查询. 但是,在这种特殊情况下,会导致单个列包含两个EyeColor并且包含HairColor其他重复行. 我怀疑那是你想要的.更好的方法可能是为您的联接表添加别名,以便您可以将其加入两次:

SELECT
  ClientCharacteristic.Id,
  ClientCharacteristic.ClientId, 
  ClientCharacteristic.Height,
  EyeLookup.LookupItem as EyeColor,
  HairLookup.LookupItem as HairColor
FROM
  dbo.ClientCharacteristic
  INNER JOIN dbo.GeneralLookup AS EyeLookup
    ON EyeLookup.Id=ClientCharacteristic.glEyeColorId
  INNER JOIN dbo.GeneralLookup AS HairLookup
    ON HairLookup.Id=ClientCharacteristic.glHairColorId
Run Code Online (Sandbox Code Playgroud)

这里要注意的关键是AS子句中的INNER JOIN子句,它为连接表的别名,以便查询的其余部分.这允许您在不同的键上多次连接同一个表,以便可以为不同的目的引用它.


Mik*_*ike 5

union或者union all应该这样做,只要列排列并且是相同的类型(或可以隐式转换)

遵循Davids建议并重新阅读5列的问题

SELECT ClientCharacteristic.Id, 
       ClientCharacteristic.ClientId,  
       ClientCharacteristic.Height, 
       Eye.LookupItem as EyeColor
       Hair.LookupItem AS HairColor
FROM 
    dbo.ClientCharacteristic 
INNER JOIN 
    dbo.GeneralLookup Eye
    ON  Eye.Id=ClientCharacteristic.glEyeColorId     
INNER JOIN
    dbo.GeneralLookup Hair
    ON Hair.Id=ClientCharacteristic.glHairColorId 
Run Code Online (Sandbox Code Playgroud)