2014-04-29 79 views
0

提供这种数据库结构如何写一个查询来查找只有男性和女性顾客的电影?同一列中的SQL多个值

movie 
    movID 
    name 
ticket 
    TID 
    movID 
    patronID 
patron 
    PID 
    gender 
+0

http://stackoverflow.com/questions/19499472/sql-query-get-multiple-values-from-same-column-for-one-row – Catmandu

+0

你有什么这么远吗?如果您可以加入表格以有效地获得所有电影的所有赞助人,那么您可以计算每个电影的不同性别数量? –

+0

我已经加入了表格,但我不确定如何去执行你所描述的计数步骤。 – sonobenissimo

回答

2

我说做两个查询来获取所有男性顾客和女食客,然后加入基于movID那些:

WITH malePatrons AS 

( 
    SELECT name, m.movID 
    FROM movie JOIN ticket tic ON movie.movID = tic.movID 
    JOIN patron pat ON pat.PID = tic.patronID 
    WHERE pat.gender = "male" 
), femalePatrons AS 

(
    SELECT name, m.movID 
    FROM movie JOIN ticket tic ON movie.movID = tic.movID 
    JOIN patron pat ON pat.PID = tic.patronID 
    WHERE pat.gender = "female" 
) 
    Select * FROM malePatrons JOIN femalePatrons fem ON malePatrons.movID = fem.movID 
0

你并不需要多次查询表。我的评论可能是一个,但太模糊,但我试图暗示你对这样的:

select m.name 
from movie m 
join ticket t on t.movid = m.movid 
join patron p on p.pid = t.patronid 
group by m.movid, m.name 
having count(distinct p.gender) = 2; 

这看起来对所有门票的所有电影,并计算谁拥有这些靠山的不同性别的数量ticketss。 (当然,为了简单,当然只有两种性别;如果你有更多的话可以添加一个过滤器)。 having条款检查计数是2.如果电影只有男性或女性顾客,而不是两个,则计数为1,并且它将被排除在结果之外。

SQL Fiddle demo

0
Select m.movieid, name, count(distinct(gender))as Count 
from 

MOVIE m 
JOIN 
Ticket t 
on m.movid=t.movid 
JOIN 
patron P 
on 
t.patronid=p.Pid 


GROUP BY m.movieid, name 
HAVING count(distinct(gender)) > 1 
相关问题