0
votes

SQLite Supprimer les duplicats de la table qui a plusieurs rangées avec la même clé primaire

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.

suivi est ma requête xxx

mais ici le problème est , il y a plusieurs rangées avec le même PID en personne.

Voici les données d'échantillon

lorsque j'exécute une requête xxx

Le résultat est xxx

Il y a un espace supplémentaire pour le nom dans la première rangée. Ces doublons doivent être supprimés


7 commentaires

Il y a plusieurs rangées avec le même PID en personne 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 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 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


3 Réponses :


1
votes

Mais ici, le problème est qu'il y a plusieurs rangées avec le même PID en personne.

Cela n'a pas vraiment de sens. Vraisemblablement, PID est la clé primaire de la table de la personne . Cela signifierait qu'il n'y a qu'une seule ligne par valeur dans personne . Il peut y avoir plusieurs lignes dans réalisateur - parce qu'une personne pourrait diriger plus d'un film.

Je pense que votre requête retournerait les bons résultats. Cependant, il n'est pas correctement formulé.

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: xxx

notes:

  • 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 .
  • Les alias de table rendent la requête plus facile à écrire et à lire.
  • Dans votre version, vous avez comptez (*) . Ce n'est généralement pas approprié avec un joindre . Habituellement, vous voudriez compter des allumettes dans la table seconde .

3 commentaires

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 .



0
votes

Cela devrait faire le tour. XXX

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. >


2 commentaires

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.



0
votes

First Exécutez ce Supprimer code> Déclaration:

update Person
set name = trim(name);


2 commentaires

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.