2014-04-29 5 views
0

Pourvu de ce type de structure DB, comment écrire une requête pour rechercher uniquement les films ayant des clients masculins et féminins?Valeurs multiples SQL dans la même colonne

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

Qu'est-ce que vous avez à ce jour? Si vous pouvez rejoindre les tables pour obtenir efficacement tous les clients pour tous les films, vous pouvez compter le nombre de genres distincts pour chacun d'eux? –

+0

J'ai commencé à me joindre aux tables, mais je ne suis pas certain de la marche à suivre pour le décompte. – sonobenissimo

Répondre

2

Je dirais que faire deux requêtes pour obtenir tous les clients masculins et féminins patrons puis se joindre à celles basées sur 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

Vous n'avez pas besoin d'interroger les tables à plusieurs reprises. Mon commentaire a peut-être été, mais trop obscur, mais je tente de vous faire allusion à quelque chose comme:

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; 

Cette recherche tous les billets pour tous les films, et compte le nombre de genres distincts du patron qui avait les billets. (Ceci suppose qu'il n'y a que deux genres bien sûr, pour plus de simplicité, si vous en avez plus, vous pouvez ajouter un filtre). La clause having vérifie que le nombre est de 2. Si un film n'a que des clients masculins ou féminins, pas les deux, le compte serait de 1, et il serait exclu du résultat.

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 
Questions connexes