2016-11-29 110 views
0

我是相當新的使用SQL,也許有更好的方法來解釋這個問題,但可以清楚地用下面的例子來描述...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
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 

......當然假設'登錄'是用戶的唯一標識符。

+0

第一個查詢似乎工作(正確縮小),但第二個查詢產生一個意外的標記:/ – phil

1

使用Group ByHaving子句。在Having子句中篩選具有不同計數的名稱gender爲1。

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

Having Min(gender) = Max(gender) 
相關問題