120 Requete SQL

kadden Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   -  
blux Messages postés 27128 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Eléments de ma requête :
1) Table : MaTable1
2) Résultat à afficher : T1, T2
3) Conditions : c1, c2, c3, c4, c5

J'ai 5 conditions : c1, c2, c3, c4, c5

Besoin :
Je dois trouver T1, T2 selon toutes les conditions possibles (Toutes les permutations possibles) ce qui me fait 120 combinaisons possibles, y'a-t-il une meilleurs façon de faire que ça :

Select T1, T2
From MaTable1
Where 
Macondition = c1


Select T1, T2
From MaTable1
Where 
Macondition = c2


Select T1, T2
From MaTable1
Where 
Macondition = c1, c2


Select T1, T2
From MaTable1
Where 
Macondition = c3


Select T1, T2
From MaTable1
Where 
Macondition = c1, c3


Select T1, T2
From MaTable1
Where 
Macondition = c1, c2, c3
A voir également:

3 réponses

blux Messages postés 27128 Date d'inscription   Statut Modérateur Dernière intervention   3 361
 
Salut,

ce n'est pas 120 requêtes que tu dois écrire, mais (si je ne me trompe pas) :

5 + 10 + 10 + 5 + 1 = 31...
0
kadden Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   9
 
Non c'est vraiment 120 combinaisons (5 factorielle) = 5 ! = 120 possibilité
mais je sais qu'il doit exister une manière de faire en une seule fois.

Merci pour votre aide.
0
blux Messages postés 27128 Date d'inscription   Statut Modérateur Dernière intervention   3 361
 
5!, c'est si tu utilises les 5 conditions en même temps (et que l'ordre est important), or ici, tu en utilises 1, 2, 3, 4 ou 5 et l'ordre n'a pas d'importance...

Tu as donc la somme de 5 combinaisons (en algèbre combinatoire, celle avec le C n k) :

C 1-5 + C 2-5 + C 3-5 + C 4-5 + C 5-5...

Et à moins de disposer d'un SQL procédural (PL/SQL), je ne vois pas comment faire autrement que par création des 31 requêtes...
0
kadden Messages postés 249 Date d'inscription   Statut Membre Dernière intervention   9
 
Merci @blux :
Je pense que même avec le principe de combinaisons on tombe bien sur 89 combinaisons possibles (cf.image)
[URL=http://www.hostingpics.net/viewer.php?id=55539484t3.png][IMG]http://img15.hostingpics.net/pics/55539484t3.png[/IMG][/URL]

Mais apparemment on m'a parlé que si j'utilisais le CROSS JOIN je pourrai faciliter les choses et utiliser une seule requête.

Je ne connais pas très bien le CROSS JOIN, mais je ne sais pas ce que ça va améliorer ? je pense que j'aurai toujours la pénible tâche de modifier autant de fois ma requête que de combinaisons possibles :)
0
blux Messages postés 27128 Date d'inscription   Statut Modérateur Dernière intervention   3 361
 
tu as oublié le k! dans le dénominateur...
ta formule est k(n-k)! alors qu'elle devrait être k!(n-k)!
0
blux Messages postés 27128 Date d'inscription   Statut Modérateur Dernière intervention   3 361
 
Le CROSS JOIN sort le produit cartésien, c'est comme si tu ne mettais pas de jointure entre deux tables...
Or ici, tu n'as qu'une table.
A moins de faire une requête avec deux fois la même table et un alias...
0