Comparer les donnée de même valeur et compter le nombre d'enregistrement
Résolu/Fermé
rasielblas
Messages postés
135
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
-
11 oct. 2019 à 15:30
rasielblas Messages postés 135 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 - 14 oct. 2019 à 08:59
rasielblas Messages postés 135 Date d'inscription jeudi 20 mars 2014 Statut Membre Dernière intervention 12 mai 2021 - 14 oct. 2019 à 08:59
A voir également:
- Comparer les donnée de même valeur et compter le nombre d'enregistrement
- Dans son restaurant, igor utilise une application pour gérer les réservations. dans le schéma (structure) de la base de données de l’application représenté ci-dessous : de quoi « telephone » est-il le nom ? de quoi « reservations » est-il le nom ? associez chaque terme avec un attribut, une donnée, un enregistrement, une table, une valeur ou une variable. - Forum Webmastering
- Le nombre de tentatives de déverrouillage incorrectes est trop élevé samsung ✓ - Forum Samsung
- Excel compter le nombre de oui ✓ - Forum Excel
- Célia doit nettoyer le tableau ci-dessous pour l’ajouter à la base de données de son entreprise. les données sont ensuite traitées automatiquement. quelles sont les 4 cellules qui risquent de poser problème ? ✓ - Forum Excel
- Excel compter le nombre de caractères spécifique dans une cellule ✓ - Forum Excel
2 réponses
Bonjour.
En effet, on t'as parlé d'UNION dans ton autre sujet, et là cela convient à faire ce que tu veux, sqlite ne gère pas le full outer join, alors une inversion des tables suffit à récupérér ce que l'on souhaite, vu qu'on souhaire récupérer aussi les valeurs nulles, alors on ne met pas de prédicat where.
Dans la fonction tables_dif, le sql deviendra alors.
Puis on appelle cette fonction et on en exploite le retour de la réquête.
Pour bien comprendre, un simple print de la variable difs devrait suffire.
Il serait quand même mieux de faire des unions sur le même type de table, donc plusieurs requêtes sql, autrement ça risque de devenir vite incompréhensible.
En effet, on t'as parlé d'UNION dans ton autre sujet, et là cela convient à faire ce que tu veux, sqlite ne gère pas le full outer join, alors une inversion des tables suffit à récupérér ce que l'on souhaite, vu qu'on souhaire récupérer aussi les valeurs nulles, alors on ne met pas de prédicat where.
Dans la fonction tables_dif, le sql deviendra alors.
sql = ''' SELECT t.nom, t2.nom FROM db.fournisseurs as t2 LEFT JOIN main_db.fournisseurs as t USING(nom) UNION SELECT t.nom, t2.nom FROM main_db.fournisseurs as t LEFT JOIN db.fournisseurs as t2 USING(nom) '''
Puis on appelle cette fonction et on en exploite le retour de la réquête.
difs = tables_dif('main', 'base1', 'base2') for db_name, results in difs.items(): records = {'main':[], db_name:[], 'commons':[]} for line in results: if line[0] is None: records[db_name].append(line[1]) elif line[1] is None: records['main'].append(line[0]) else: records['commons'].append(line[0]) print('>>>', db_name) commons_len = len(records['commons']) print('enregistrements main.fournisseurs :', commons_len + len(records['main'])) print('enregistrements %s.fournisseurs :' % db_name, commons_len + len(records[db_name])) print('Dans les deux tables fournisseurs:', ', '.join(records['commons'])) print('Seulement dans main.fournisseurs :', ', '.join(records['main'])) print('Seulement dans %s.fournisseurs :' % db_name, ', '.join(records[db_name])) print()
Pour bien comprendre, un simple print de la variable difs devrait suffire.
Il serait quand même mieux de faire des unions sur le même type de table, donc plusieurs requêtes sql, autrement ça risque de devenir vite incompréhensible.
Bonsoir.
Quel est l'objectif à terme ?
As-tu vraiment besoin de récupérer les lignes de table2 n'étant pas dans table1 ?
Quelle est la structure réelle de tes tables ?
J'imagine quand même que dans tes tables la colonne "nom" doit être UNIQUE, sinon il y a des risques de doublonnages.
Personnellement, si j'étais dans ce cas de figure, je ferai simplement un INSERT ... SELECT, et puis c'est tout.
Un truc comme.
Mais faudrait vraiment décrire précisément ce que tu veux faire de A à Z.
Sinon pour compter, bah; c'est simplement faire une requête
Quel est l'objectif à terme ?
As-tu vraiment besoin de récupérer les lignes de table2 n'étant pas dans table1 ?
Quelle est la structure réelle de tes tables ?
J'imagine quand même que dans tes tables la colonne "nom" doit être UNIQUE, sinon il y a des risques de doublonnages.
Personnellement, si j'étais dans ce cas de figure, je ferai simplement un INSERT ... SELECT, et puis c'est tout.
Un truc comme.
sql = '''INSERT INTO main_db.fournisseurs (nom) SELECT t2.nom FROM db.fournisseurs as t2 LEFT JOIN main_db.fournisseurs as t USING(nom) WHERE t.nom IS NULL '''
Mais faudrait vraiment décrire précisément ce que tu veux faire de A à Z.
Sinon pour compter, bah; c'est simplement faire une requête
COUNT(*)de ta table2 puis de soustraire le nombre d'éléments retournés dans
res['table2'], ce n'est pas très compliqué.
rasielblas
Messages postés
135
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
9
12 oct. 2019 à 10:42
12 oct. 2019 à 10:42
yg_be
Messages postés
23449
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2025
1 564
>
rasielblas
Messages postés
135
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
12 oct. 2019 à 12:04
12 oct. 2019 à 12:04
c'est de moins en moins clair:
1) ton exemple en #2 est faux, regarde le nombre d’enregistrements par table
2) tu as changé d'avis entre hier à 15h30 et ce matin à 10h42, ta demande a changé.
3) tu écris que tu as 3 bases, et ton exemple n'en montre que 2
par ailleurs, tu as une autre demande qui est en cours: https://forums.commentcamarche.net/forum/affich-36250144-comparaison-de-plusieurs-tables-avec-plusieurs-base-de-donnee
je pense qu'il serait préférable que tu termines d'abord de travailler sur celle-là.
ensuite, que tu réfléchisses bien à ce que tu veux obtenir, et que tu réfléchisses aussi à comment l'obtenir, à essayer avant de faire appel à nous.
1) ton exemple en #2 est faux, regarde le nombre d’enregistrements par table
2) tu as changé d'avis entre hier à 15h30 et ce matin à 10h42, ta demande a changé.
3) tu écris que tu as 3 bases, et ton exemple n'en montre que 2
par ailleurs, tu as une autre demande qui est en cours: https://forums.commentcamarche.net/forum/affich-36250144-comparaison-de-plusieurs-tables-avec-plusieurs-base-de-donnee
je pense qu'il serait préférable que tu termines d'abord de travailler sur celle-là.
ensuite, que tu réfléchisses bien à ce que tu veux obtenir, et que tu réfléchisses aussi à comment l'obtenir, à essayer avant de faire appel à nous.
rasielblas
Messages postés
135
Date d'inscription
jeudi 20 mars 2014
Statut
Membre
Dernière intervention
12 mai 2021
9
14 oct. 2019 à 08:57
14 oct. 2019 à 08:57
Merci pour votre aide, je n'ai pas changé d'avis à propos de nombre de base, en fait j'ai même plusieurs bases mais c'est juste un exemple, avant de lancé un discussion je créer mon code, je teste, je faire la correction, c'est quand je suis complètement bloqué que je postule un sujet mais merci quand même pour cet avis!
Modifié le 14 oct. 2019 à 09:01