2016-12-13 7 views
0

HALLO! Ich habe ein Problem mit dieser Abfrage in MARIADB Sprache. Ich möchte eine Schnittmenge mit demselben Feld aber mit zwei Werten machen. Das Problem ist, dass ich die INTERSECT-Abfrage nicht verwenden kann. Wie kann ich es tun?? Ich habe es mit exists und inner join versucht, aber es funktioniert immer noch nicht.Intersect Abfrage in MariaDB

SELECT nombre 
FROM actores 
WHERE codactor IN (SELECT actor 
        FROM participacion 
        WHERE (titulo,año) IN (SELECT titulo, año 
              FROM peliculas 
              WHERE director IN (SELECT coddirector 
                   FROM directores d 
                   WHERE d.nombre='Alejandro' 
                   AND d.apellido='Amenabar'))) 

INTERSECT 

SELECT nombre 
FROM actores 
WHERE codactor IN (SELECT actor 
        FROM participacion 
        WHERE (titulo,año) IN (SELECT titulo,año 
              FROM peliculas 
              WHERE director in (SELECT coddirector 
                   from directores p 
                   WHERE p.nombre='Pedro' 
                    AND p.apellido='Almodobar'))); 

DANKE !!

+0

Ich sehe nicht und Unterschied zwischen beiden Abfrage. Welches Ergebnis erwartest du zu bekommen? Nach dem Schnitt brauchen Sie ''(' '? Weil Sie es nicht geschlossen haben. Also müssen beide Abfragen von''() '' eingeschlossen sein oder auch nicht. –

+0

Buenas quizá me entiendas mejor en español. Mira tengo al director alejandro Amenabar con dos actores (tom Cruise y Penélope Cruz) ya pedro Almodobar con solamente Penélope Cruz. Y quiero que mi consulta saque la intersección, es decir, Solamente eine Penélope Cruz. Muchas gracias –

+0

Si español hablo, pero este sitio se debe escribir en 'ingles', de otro modo solo unos pocos te pueden Responder. Si quieres puedes usar la versión en español http://es.stackoverflow.com/. Ahora como te dije, no hay diferencia entre dos esos Abfrage. Debes proveer Source Data und erwarteter Ausgang para saber que necesitas –

Antwort

0

Zuerst es so versuchen, überprüfen Sie alle Akteure. Ich muss Codator hinzufügen, falls Sie Schauspieler mit demselben Namen haben.

SELECT a.codactor, a.nombre -- add ', *' to see all columns and test query is ok. 
FROM actores a 
JOIN participacion p 
    ON a.codactor = p.actor 
JOIN peliculas m 
    ON p.titulo = m.titulo 
AND p.ano = m.ano 
JOIN directores d 
    ON p.director = d.coddirector 
WHERE (d.nombre = 'Alejandro' and d.apellido = 'Amenabar') 
    OR (d.nombre = 'Pedro'  and d.apellido = 'Almodobar') 

Dann fügen Sie GROUP BY zu sehen, welche Schauspieler in Filmen von beiden Direktoren.

GROUP BY a.codactor, a.nombre 
HAVING COUNT(DISTINCT coddirector) = 2 
+0

Sind Sie sicher in Tabelle 'participacion' Feld "Schauspieler" ist der FK zu "Schauspielern" -Tisch? macht keinen Sinn, sollte "Codator" sein. –

+0

Dieser Code hat funktioniert !! Danke vielmals!! –

+0

Können Sie mir erklären, warum verwenden Sie Zählung verschiedene coddirector mit = 2? Ich verstehe den Grund nicht. Vielen Dank!! –