Sous-requête dans la JOINTURE INTERNE (MySQL)

Me semble que j'ai un problème avec une sous-requête dans une jointure interne qui ne fait pas, de ce que j'avais.

  • Serveur: Localhost via UNIX socket
  • Logiciel: MySQL
  • Version du logiciel: 5.5.32-nmm2-log - (Ubuntu)
  • Client de base de données version: libmysql - 5.5.32

Il y a un m:n table à construire avec les 3 tables dont seulement 2 sont pertinents pour le problème.

  • La première est un tableau qui contient les acteurs, de l'identificateur: caid.
  • La seconde est la croix-table relie les acteurs de cinéma (acteur id: caid, film id: id)

Quand je créer une jointure interne comme ceci:

SELECT count( * ) AS Count, lastname, firstname
FROM DVDPROFILER_dvd_common_actor
INNER JOIN DVDPROFILER_dvd_actor ON DVDPROFILER_dvd_common_actor.caid = DVDPROFILER_dvd_actor.caid
WHERE DVDPROFILER_dvd_actor.caid > 0
GROUP BY DVDPROFILER_dvd_actor.caid
ORDER BY Count DESC 

- Je obtenir exactement ce que j'avais prévu: Le top des acteurs pris en compte par le temps, il est crédité dans n'importe quel film, même si c'est plusieurs fois pour de multiples rôles.

Mon objectif est d'extraire l'information de la façon dont beaucoup de différents films d'un acteur est profilé et j'ai pensé naïf que je suis, il devrait être aussi simple que cela:

SELECT count( * ) AS Count, lastname, firstname
FROM DVDPROFILER_dvd_common_actor
INNER JOIN
  (SELECT caid
  FROM DVDPROFILER_dvd_actor
  GROUP BY id) AS DVDPROFILER_dvd_actor 
ON DVDPROFILER_dvd_common_actor.caid = DVDPROFILER_dvd_actor.caid
WHERE DVDPROFILER_dvd_actor.caid > 0
GROUP BY DVDPROFILER_dvd_actor.caid
ORDER BY Count DESC 

Mais les résultats sont totalement incorrectes

Donc j'ai vérifié la sous-requête avec un acteur

SELECT caid, id
FROM DVDPROFILER_dvd_actor
WHERE caid = 30801
GROUP BY id

Et obtenu exactement ce que j'attendais

J'ai donc joué un peu et quand j'ai introduit une clause LIMIT dans la sous-requête, j'ai soudain eu différentes mais jamais de réponses exactes.

SELECT count( * ) AS Count, lastname, firstname
FROM DVDPROFILER_dvd_common_actor
INNER JOIN 
  (SELECT caid
  FROM DVDPROFILER_dvd_actor
  GROUP BY id
  LIMIT 0 , 50000) AS DVDPROFILER_dvd_actor 
ON DVDPROFILER_dvd_common_actor.caid = DVDPROFILER_dvd_actor.caid
WHERE DVDPROFILER_dvd_actor.caid > 0
GROUP BY DVDPROFILER_dvd_actor.caid
ORDER BY Count DESC 

Avec des Limites différentes, j'ai obtenu des résultats différents, mais à un certain moment, quand je vais au-delà d'une certaine limite, le résultat est exactement comme il est sans limite, mais tout aussi erronée.

Que suis-je surplombant ici? 🙁

InformationsquelleAutor Dee J. Doena | 2013-12-05