Ma question est de répertorier tous les administrateurs qui ont dirigé 10 films ou plus, dans l'ordre décroissant du nombre de films qu'ils ont dirigés. Remettez les noms des administrateurs et le nombre de films que chacun d'entre eux dirigé
J'ai deux tables, une table de réalisateur qui a une carte d'identité (clé principale), des colonnes MID et PID. et autre est la table de la personne qui a PID (clé primaire), nom, colonnes de genre. p>
suivi est ma requête p> mais ici le problème est , il y a plusieurs rangées avec le même PID en personne. p> Voici les données d'échantillon p> lorsque j'exécute une requête p> Le résultat est p> Il y a un espace supplémentaire pour le nom dans la première rangée. Ces doublons doivent être supprimés p> p>
3 Réponses :
Mais ici, le problème est qu'il y a plusieurs rangées avec le même PID en personne. P>
Cela n'a pas vraiment de sens. Vraisemblablement,
PID code> est la clé primaire de la table code> de la personne code>. Cela signifierait qu'il n'y a qu'une seule ligne par valeur danspersonne code>. Il peut y avoir plusieurs lignes dansréalisateur code> - parce qu'une personne pourrait diriger plus d'un film. P>Je pense que votre requête retournerait les bons résultats. Cependant, il n'est pas correctement formulé. P>
Il serait préférable d'utiliser une jointure intérieure, car vous envisagez uniquement des personnes qui ont dirigé au moins un film (bien, au moins 10 en fait). Donc: p>
xxx pré> notes: p>
- Lorsque vous vous référez à plusieurs tables, vous devez qualifier tous les noms de colonnes. La seule exception sont des colonnes dans la clause code> code>. Li>
- Les alias de table rendent la requête plus facile à écrire et à lire. Li>
- Dans votre version, vous avez
comptez (*) code>. Ce n'est généralement pas approprié avec un joindre code> code>. Habituellement, vous voudriez compter des allumettes dans la table seconde em>. Li> ul> blockQuote>
Il y a plusieurs rangées avec le même PID dans la table de personnes. Nous devons donc éliminer les doublons d'abord, puis nous devrions rejoindre deux tables.
Ajout de la garniture distincte (nom) dans la première ligne a mon réponse, mais mon doute est la raison pour laquelle vous avez regroupé par PID et par nom au lieu de seulement PID
@rajashekar. . . En général, vous devez regrouper toutes les colonnes non agrégées dans le SELECT CODE>.
Cela devrait faire le tour. mais idéalement, vous voudrez vous référer à une table séparée avec ID de personne unique et utiliser une clause de jointure. P> P> P> P> >
Il n'y a pas de champ de nom dans la table du réalisateur. Ça va lancer une erreur
Dans ce cas, utilisez CTE, avec PID unique. Les enregistrements en double semblent être dues à des espaces blancs devant. Utilisez des fonctions de texte appropriées ou pour les rendre uniques.
First Exécutez ce Supprimer code> Déclaration: update Person
set name = trim(name);
Il lance une erreur "AVERTISSEMENT: Vous ne pouvez exécuter qu'une déclaration à la fois." Tout en exécutant la première requête (qui supprime les duplicats)
Comment exécutez-vous la déclaration? Exécuter uniquement cela.
Il y a plusieurs rangées avec le même PID en personne i> est-ce vrai ???? PID n'est-il pas la clé primaire de la personne du tableau?
Oui, plusieurs lignes avec le même PID et PID sont la clé principale de la table de personnes
@rajashekar Lisez ceci: SQLITEETTORIAL.NET/SQLITE-PROMARY-KEY Vous comprendrez donc vous comprenez Quelle clé primaire b> est. Si vous ne pouvez pas fournir les informations nécessaires à votre question, n'attendez aucune aide.
@ forpas je sais qu'il ne devrait y avoir qu'une seule clé primaire unique. Mais c'est le jeu de données que j'ai où j'ai besoin de supprimer ces lignes en double dans la table de la personne
@rajashekar pid est pas b> une clé primaire s'il existe des pids en double à l'intérieur de la personne de la table. Si vous souhaitez supprimer les duplicats, dites-le donc dans votre question.
@rajashekar Quel est l'index de colonne dans vos résultats?
Ce n'est pas une colonne. C'est juste l'index de la ligne