SQL选择表中与另一个表中的n个行匹配的行

时间:2016-11-29 01:47:40

标签: sql db2

我使用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)
    ...
    );

我正在尝试查询播放器,其中所有的头像都与其性别相匹配。因此,只有当一个玩家是男性,并且他们的所有化身都是男性时,我才想要包括该行(反之亦然)。

2 个答案:

答案 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 ByHaving子句。在gender子句中过滤名为Having的名称为1的

select name 
from Avatar 
Group by name 
Having count(distinct gender) = 1 

Having Min(gender) = Max(gender)