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
- Alexia organise un séminaire en ligne (webinaire) : elle cherche un outil qui permet de gérer les invitations, de relancer les invités et d’enregistrer le webinaire. - Forum Word
- En raison d'un nombre important d'échec de connexion snapchat - Forum Snapchat
- 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
- Excel compter le nombre de cellule d'une couleur - Guide
- 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
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
1 557
>
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