不等于运营商的挑战

时间:2018-05-23 15:06:22

标签: sql hana

我有一个问题需要解决。我想仅使用where子句从下表中获得性别不等于女性的国家/地区。我不想使用以下子查询:从国家不在的表中选择国家(从性别='女性'的表中选择国家)

有什么想法吗?

ID  Name    Gender  Country
1   Jhon    Male    USA
2   Katie   Female  USA
3   Steave  Male    UK
4   Gerry   Female  UK
5   Brad    Male    AUS

此致 钱德拉。

4 个答案:

答案 0 :(得分:0)

使用not exists

select t.*
from table t
where not exists (select 1 
                  from table 
                  where Country = t.Country and 
                        Gender = 'Female'
                  );

您也可以使用group by

select Country 
from table t
group by Country 
having sum(case when Gender = 'Female' then 1 else 0 end) = 0;

答案 1 :(得分:0)

您可以使用以下命令来避免使用子查询并获取完整行:

SELECT TOP 1 WITH TIES *
FROM tab
ORDER BY SUM(CASE WHEN Gender='Female' THEN 1 ELSE 0 END) 
         OVER(PARTITION BY Country);

<强> DBFiddle Demo - SQL Server

答案 2 :(得分:0)

你可以这样做:

select country
from t
except
select country
from t
where gender = 'Female';

作为集合运算符,except会删除重复项。

答案 3 :(得分:0)

也许我的问题出了问题,但为什么你不能使用:

SELECT country FROM table WHERE gender NOT IN('Female')

或者它是一个子查询?