我有一个问题需要解决。我想仅使用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
此致 钱德拉。
答案 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')
或者它是一个子查询?