Sql 如果不等于,则仅获取一行

Sql 如果不等于,则仅获取一行,sql,sql-server,Sql,Sql Server,我有我的桌子: ID | NAME | TYPE 1 | A | 1 2 | A | NULL 3 | B | NULL 4 | C | 2 5 | D | NULL 6 | D | NULL 例如,如果我选择类型1,我会得到行,但我希望从另一行得到所有空值 ID | NAME | TYPE 1 | A | 1 3 | B | NULL

我有我的桌子:

ID | NAME | TYPE             
1  | A    | 1    
2  | A    | NULL  
3  | B    | NULL  
4  | C    | 2    
5  | D    | NULL 
6  | D    | NULL   
例如,如果我选择类型1,我会得到行,但我希望从另一行得到所有空值

ID | NAME | TYPE             
1  | A    | 1    
3  | B    | NULL  
5  | D    | NULL 
6  | D    | NULL   
有时候像这样。我尝试使用union,但得到了重复A | NULL

您似乎想要的所有thx:

select t.*
from t
where type = 1
union all
select t.*
from t
where type is null and
      not exists (select 1 from t t2 where t2.name = t.name and t2.type = 1);
实际上,你并不需要工会:

select t.*
from t
where type = 1 or
      (type is null and
       not exists (select 1 from t t2 where t2.name = t.name and t2.type = 1)
      );