0
votes

Query SQL n'apparaît pas de résultats. La requête est d'énumérer les noms de tous les acteurs qui ont joué dans le film 'Anand'

Veuillez voir les tables:

tables p>

 Tables P>

Méthode de sous-requête: P>

select p.Name 
from Movie m 
join M_Cast mc on m.MID = mc.MID 
join Person p on mc.PID = p.PID 
group by m.MID 
having lower(m.title)='anand'


3 commentaires

Quelle base de données utilisez-vous? Vous avez marqué plusieurs multiples.


Quelle est votre erreur?


J'utilise SQLite3 avec des pandas et l'exécution de cela dans Jupyter Notebook


3 Réponses :


0
votes

Sélectionnez Movie.Title, personne.name De (Movie inner rejoindre mcast sur film.mid = mcast.mid) Personne de jointure intérieure sur mcast.pid = personne.pid Où (((((((film.title) = "anand"));


0 commentaires

0
votes
  1. Votre première requête fonctionne sans erreurs et si vous effectuez des ajustements comme dans mes quelques étapes suivantes, la seconde fonctionnera également. P> LI>

  2. Votre deuxième requête: Vous ne pouvez pas sélectionner que P.Name et groupe par uniquement m.mid. S'il est dans la clause SELECT et ne fait pas partie de la fonction globale, vous devez l'utiliser dans le groupe par clause. Par exemple, comme celui-ci: p> XXX PRE> LI>

  3. Votre deuxième requête a également une clause ayant inférieur (m.title) = 'anand' code> mais il devrait être dans la clause comme ceci: p> XXX PRE> LI>

  4. Maintenant que les deux requêtes fonctionnent, vous devez vérifier si vous avez un film avec le titre 'Anand' dans vos données. De plus, vous devez vérifier si vous avez des données MID et PID correspondantes dans d'autres tables. P> LI>

  5. J'ai testé cela dans MySQL, mais cela vous aidera peut-être même si vous utilisez une autre base de données pour vous guider à travers des erreurs ... Voici une petite démo dans MySQL où vous verrez que les données ne seront pas retournées s'il n'y a pas de données dans une table. P> LI>

  6. Voici une petite démo pour SQLite où vous pouvez voir que votre première requête fonctionne: http://sqlfiddle.com/#!7/3ec44/1 Et voici une petite démo où vous pouvez voir que mon code fonctionne: http://sqlfiddle.com/#!7/3ec44/2 Veuillez vérifier les données! P> li>

  7. Après avoir échangé peu de commentaires avec OP, j'ai remarqué que c'est peut-être un espace vide dans les données faisant un problème. Alors j'ai suggéré ceci: p> XXX PRE> LI>

    Ceci peut également être implémenté dans la deuxième requête: P>

        select p.Name 
        from Movie m 
        join M_Cast mc on m.MID = mc.MID 
        join Person p on trim(mc.PID, ' ') = trim(p.PID, ' ') 
        where lower(m.title)='anand'
        group by p.Name;
    


13 commentaires

Merci d'avoir répondu, mais je crains que cela ne fonctionne toujours pas, pour la première requête, il n'y a pas de nom affiché et pour la seconde, elle affiche une erreur si je change "avoir" à "où". J'utilise SQLite3 et Pandas et j'exécute tout cela dans Jupyter Notebook.


@Sudhanshu Raturi Avez-vous lu ce que j'ai écrit? Avez-vous des données dans votre film de table avec le nom "Anand"? En outre, il ne s'agit pas simplement de remplacer avec où il s'agit d'un emplacement de la commande qui est également important. S'il vous plaît vérifier ma réponse en plus de détails à nouveau.


Salut @sudhanshuraturi Veuillez vérifier mon commentaire et la réponse mise à jour.


oui j'ai lu votre réponse et oui, il y a un record avec le titre comme Anand, et j'ai pris soin de l'emplacement aussi


OK, avez-vous vérifié qu'il existe une donnée correspondante dans d'autres tables (PID et Valeurs moyennes)? Avez-vous vu que la requête fonctionne dans ma démo?


Oui, j'ai vérifié qu'il y a aussi des données sur les autres tables et oui, j'ai vu la démo. Je ne sais pas pourquoi cela ne fonctionne pas dans Jupyter Notebook. jusqu'à 2 sous-requêtes intérieures, cela fonctionne totalement bien et montrez environ 16 résultats, mais quand j'ajoute la troisième et dernière requête extérieure, alors rien ne se présente


Ok, je comprends, s'il vous plaît vérifier également ceci: vous dites "jusqu'à 2 sous-requêtes intérieures tandis que cela fonctionne totalement et montrez environ 16 résultats", puis vous dites: "Quand j'ajoute la troisième et dernière requête extérieure, alors rien ne se présente". S'il vous plaît, chèque y a-t-il une valeur pid dans une personne de table identique à celle de 16 valeurs de PID


oui j'ai copié l'une de ces PID et directement sélectionné le nom de la personne avec ce PID et oui, il a montré le nom


Colonne PID dans m_cast est de quel type de données?


Varchar Je suppose


S'il vous plaît, pouvez-vous essayer ceci: Sélectionnez P.Name à partir de la personne P où la garniture (p.pid, '') dans (Sélectionnez la tranche (MC.PID, '') de M_CAST MC où MC.MID IN (Sélectionnez M. Milieu de film m où plus faible (titre) = 'anand'))


Merci beaucoup cela a fonctionné, voudriez-vous s'il vous plaît élaborer quel était le problème?


@Ssudhanshuraturi espère que l'explication était correcte. À votre santé!



0
votes
select distinct p.name  [Actors in Anand]
Movie m
join M_Cast mc on mc.MID=m.MID
join Person p on p.PID=mc.PID
where m.title="Anand"
order by p.name

1 commentaires

S'il vous plaît fournir plus de fond dans votre réponse