[RESOLU] GROUP BY des résultats des 2 tables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] GROUP BY des résultats des 2 tables

Re: [RESOLU] GROUP BY des résultats des 2 tables

par two3d » 22 nov. 2021, 12:36

Merci, ta solution fonctionne parfaitement:
SELECT * FROM (SELECT id, pseudo, mail FROM membres UNION SELECT NULL AS id, NULL AS pseudo, mail FROM mails) AS tmp GROUP BY mail
La mienne ne fonctionne pas ;)

C'est tellement puissant le SQL, je suis bluffé à chaque fois mais ça me dépasse, merci pour l'aide!

Re: [RESOLU] GROUP BY des résultats des 2 tables

par @rthur » 22 nov. 2021, 10:57

Du coup je confirme que ce n'est pas utile vu que tu as déjà l'info complète dans la table membres ;)

Re: GROUP BY des résultats des 2 tables

par two3d » 21 nov. 2021, 19:43

Mon idée est de mettre la valeur de la colonne id et pseudo de la table membres dans les colonnes artificielles (id et pseudo) de la table mails, ceci afin d'enlever les doublons.

Re: GROUP BY des résultats des 2 tables

par @rthur » 21 nov. 2021, 18:37

On peut peut être nommer la table membres pour donner l'id et le pseudo à la table mails ?
Pas sûr d'avoir compris ton idée mais je dirai que ce n'est pas utile vu que tu as déjà l'info complète dans la table membres, donc il suffit de conserver cette info lors du dédoublonnage.

Re: GROUP BY des résultats des 2 tables

par two3d » 21 nov. 2021, 17:15

Trop fort! Merci.
un conseil en passant, il vaut mieux nommer explicitement ses colonnes dans le SELECT d'un UNION ça permet de s'assurer qu'elles soient dans le même ordre
Merci.

:idea: La 2ème astuce est de réimbriquer ta requête UNION dans une 3ème avec un simple GROUP BY mail :
SELECT * FROM (SELECT id, pseudo, mail FROM membres UNION SELECT NULL AS id, NULL AS pseudo, mail FROM mails) AS tmp GROUP BY mail
Je testerais demain ;)

On peut peut être nommer la table membres pour donner l'id et le pseudo à la table mails ?

Exemple:
SELECT id, pseudo, mail FROM membres m1 UNION SELECT id.m1 AS id, pseudo.m1 AS pseudo, mail FROM mails m2
Pas testé..

Re: GROUP BY des résultats des 2 tables

par @rthur » 21 nov. 2021, 13:44

Ah oui effectivement, j'avais lu trop vite.

Pour que UNION fonctionne il te faut le même nombre de colonnes.
:idea: L'astuce est de créer des colonnes "virtuelles" dans ton SELECT :
SELECT NULL AS id, NULL AS pseudo, mail FROM mails
Va t'afficher ta table mails avec des colonnes id et pseudo null (sachant que tu peux remplacer NULL dans ma requête en réalité par ce que tu veux)

Du coup, désormais ton UNION va fonctionner (un conseil en passant, il vaut mieux nommer explicitement ses colonnes dans le SELECT d'un UNION ça permet de s'assurer qu'elles soient dans le même ordre) :
SELECT id, pseudo, mail FROM membres UNION SELECT NULL AS id, NULL AS pseudo, mail FROM mails

:!: Sauf que... tu veux les mails sans doublon, or UNION va supprimer les doublons mais uniquement les doublons qui ont le même id, le même pseudo et le même email, ce qui n'est pas ce que tu veux puisqu'on vient de remplir ta table mails avec des valeurs NULL pour l'id et le pseudo...


:idea: La 2ème astuce est de réimbriquer ta requête UNION dans une 3ème avec un simple GROUP BY mail :
SELECT * FROM (SELECT id, pseudo, mail FROM membres UNION SELECT NULL AS id, NULL AS pseudo, mail FROM mails) AS tmp GROUP BY mail

:arrow: Et là ça devrait marcher comme tu veux ! :D

Re: GROUP BY des résultats des 2 tables

par two3d » 20 nov. 2021, 15:14

C'est ce que j'ai fait, ça ne peut pas marcher car une jointure doit être faite avec un concordance (si j'ai bien compris) donc je peux pas demander "est ce que table1.id = table2.id"

Re: GROUP BY des résultats des 2 tables

par @rthur » 20 nov. 2021, 14:17

Regarde du côté des jointures SQL :
https://sql.sh/cours/jointures

GROUP BY des résultats des 2 tables

par two3d » 20 nov. 2021, 01:59

J'ai deux tables:

"membres"
colonnes: id, pseudo, mail

"mails"
colonnes: mail

Je souhaite regrouper tous les mails, sans faire de doublons.

Je souhaite que le résultat retourne les colonnes "id", "mail" et "pseudo"

UNION fonctionne bien mais je peux pas avoir id et pseudo de la table membres avec.