2013-11-22 78 views
0

我需要显示每个至少有一个女性成员的所有艺术家的名称。MySQL使用子查询而不是JOIN

成员表如下所示:

Members 
------- 
MemberID, Firstname, Lastname, Address, Gender 

艺术家表如下所示:

Artists 
------- 
ArtistID, Artistname, City 

的表可以使用xRefArtistsMembers表,这是关系如下:

xRefArtistsMembers 
------------------ 
MemberID, ArtistID 

我已制定以下子查询:

select 
    ar.artistname from artists ar 
where 
    ar.artistid in 
    (
    (
     select 
     x.artistid 
     from 
     xrefartistsmembers x 
    ) 
    in 
    (
     select 
     m.memberid 
     from 
     members m 
    ) 
); 

不编译。同样,我的问题是:我需要显示至少有一名女性成员的所有艺术家的姓名。只使用子查询。

+2

您没有列表示成员的性别。 – Dai

+0

各有一位女性会员?你会如何发现..我没有看到任何性别列 – Backtrack

+0

让我道歉,我无意中忘记包括记录数据的关键peice。 – user2948897

回答

1

尝试

SELECT * 
    FROM artists a 
WHERE EXISTS 
(
    SELECT * 
    FROM xRefArtistsMembers x 
    WHERE artistid = a.artistid 
    AND EXISTS 
    (
    SELECT * 
     FROM members 
    WHERE memberid = x.memberid 
     AND gender = 'female' 
) 
) 

这里是SQLFiddle演示

+0

感谢您的回复。出于某种原因,以下查询:select * from artists ar where artistname in(从members.gender ='F'的成员中选择性别);出于某种原因产生了一个空的设置> – user2948897

+0

你非常欢迎。 ;)在上面的注释中提到的查询如何在内部子查询中将外部select中的'artistname'与'gender'进行比较时生成任何内容。 – peterm

+0

非常正确。好的,谢谢,我想我更了解“EXISTS”声明 – user2948897