查询返回2个不同的行,即使我使用了UNION

时间:2014-08-12 06:08:10

标签: sql tsql

我将union放在两个选择的查询中,但它仍然返回两行,它应该返回1行,因为我已经使用了union。为什么它返回2个不同的行?它应该返回单行而不是2行。

QUERY

ALTER PROCEDURE [dbo].[usp_GetUserProject]       
 (      
 @User_ID int=2
 )      
AS      
BEGIN      
       if @User_ID !=0
       begin
 select distinct (x.Project_ID),x.ProjectName,x.ID,x.IsSource,x.IsDeployement 
   from
    (
     select p.Project_ID, cp.ProjectName  
           ,ISNULL(pa.IsSource,'false') as IsSource   
           ,isnull(pa.IsDeployement,'false') as IsDeployement  
           ,ISNULL(pa.ID,0) AS ID      
     from Project p   
     inner join ProjectAssigment pa      
     on p.Project_ID =pa.Project_ID  
     --and p.UserID=pa.User_ID      
     inner join WebUsers u    
     on p.UserID=u.UserID     
     inner join ClientProjects cp      
     on cp.ClientProjectID=p.Project_ID      
     where pa.User_ID=@User_ID 
     --and pa.IsSource=1 and pa.IsDeployement=1
     union 
     select  p.Project_ID, cp.ProjectName  
            ,ISNULL(pa.IsSource,'false') as IsSource  
            ,isnull(pa.IsDeployement,'false') as IsDeployement  
            ,ISNULL(pa.ID,0) AS ID      
     from Project p   
     inner join ClientProjects cp      
     on cp.ClientProjectID=p.Project_ID
     left join ProjectAssigment pa      
     --on pa.Project_ID=p.Project_ID 
     on pa.User_ID=p.UserID        
     left  join WebUsers u    
     on pa.User_ID=u.UserID     
     and u.UserID!=@User_ID 
   ) as x
  group by x.Project_ID,x.ProjectName,x.ID,x.IsDeployement,x.IsSource
  end  
END

1 个答案:

答案 0 :(得分:0)

如果2个选择查询的值不同,它将返回其他两行(如果相同),当您使用UNION时它将返回单行。 UNION删除集合中的重复项,执行集合并操作。

您需要使用UNION ALL