Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/02/2011, 15h52   #1
Invité de passage
 
hautselfes@msn.com hautselfes@msn.com
Inscription : février 2011
Messages : 12
Détails du profil
Informations personnelles :
Nom : hautselfes@msn.com hautselfes@msn.com

Informations forums :
Inscription : février 2011
Messages : 12
Points : 0
Points : 0
Par défaut Cross join sur la même table

Bonjour,

J'aurais besoin de votre aide pour une requête à faire dont je ne trouve pas la solution...

Le but est de faire un Cross Join sur une même table et de supprimer les entrées doubles.

Le principe est celui d'un mini tournoi de foot.

J'ai une table T_equipe où j'ai trois équipes différentes (Lausanne Sport, Moudon, Sierre) et celles-ci doivent jouer les une contre les autres UNE SEULE FOIS ! Donc pas de match retour !

Voici ma requête que j'exécute :
Code :
1
2
3
4
SELECT *
FROM T_equipe equipe1
CROSS JOIN t_equipe equipe2 ON equipe1.id_equipe != equipe2.id_equipe
ORDER BY rand()
Et le résultat :
Code :
1
2
3
4
5
6
7
8
ID_Equipe  NomEquipe          ID_Equipe  NomEquipe    
---------  -----------------  ---------  -------------------
3          Moudon             1          Lausanne Sport
3          Moudon             2          Sierre
2          Sierre             3          Moudon
1          Lausanne Sport     3          Moudon
2          Sierre             1          Lausanne Sport
1          Lausanne Sport     2          Sierre
Je souhaite donc supprimer les matchs doubles... mais je ne sais pas comment faire. Merci de votre aide.

Bonne journée.
Dylanddd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 16h17   #2
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 081
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 081
Points : 1 875
Points : 1 875
Bonjour,
Tu peux modifier la condition de jointure:
Code SQL :
1
2
3
4
5
select *
from T_equipe equipe1
cross join t_equipe equipe2 on equipe1.id_equipe < equipe2.id_equipe
order by rand()

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 17h15   #3
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
CROSS JOIN est la syntaxe du produit cartésien, et par définition il n'y a donc pas de prédicat de jointure.

Vous pouvez écrire :
Code :
1
2
3
4
SELECT *
  FROM T_equipe equipe1
       CROSS JOIN t_equipe equipe2
 WHERE equipe1.id_equipe < equipe2.id_equipe
Ou
Code :
1
2
3
4
SELECT *
  FROM T_equipe equipe1
       INNER JOIN t_equipe equipe2
         ON equipe1.id_equipe < equipe2.id_equipe
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 17h27   #4
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 081
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 081
Points : 1 875
Points : 1 875
Citation:
Envoyé par Waldar Voir le message
CROSS JOIN est la syntaxe du produit cartésien, et par définition il n'y a donc pas de prédicat de jointure.
Bon,bha il est temps que je parte en week-end

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h13.


 
 
 
 
Partenaires

Hébergement Web