我使用SQL时相当新,也许有更好的方法可以解决这个问题,但可以使用以下示例清楚地描述...
在视频游戏数据库中,我有一个包含多个帐户的播放器表格:
create table Player (
login varchar(15) not null,
name varchar(15) not null,
gender char(1) not null,
...
);
每个帐户都有多个头像
create table Avatar (
login varchar(15) not null,
name varchar(15) not null,
gender char(1)
...
);
我正在尝试查询播放器,其中所有的头像都与其性别相匹配。因此,只有当一个玩家是男性,并且他们的所有化身都是男性时,我才想要包括该行(反之亦然)。
答案 0 :(得分:2)
SELECT * FROM Player p WHERE NOT EXISTS(SELECT * FROM Avatar a WHERE a.login = p.login AND a.gender <> p.gender)
这应该可以解决问题。虽然它也匹配没有阿凡达的玩家。
SELECT * FROM Player p WHERE NOT EXISTS (SELECT * FROM Avatar a WHERE a.login = p.login AND a.gender <> p.gender) AND COUNT(SELECT * FROM Avatar a WHERE a.login = p.login) >= 1
...当然假设'login'是用户的唯一标识符。
答案 1 :(得分:1)
使用Group By
和Having
子句。在gender
子句中过滤名为Having
的名称为1的
select name
from Avatar
Group by name
Having count(distinct gender) = 1
或
Having Min(gender) = Max(gender)