120 Requete SQL

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

3 réponses

  1. 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 :)
    1. Modérateur
      tu as oublié le k! dans le dénominateur...
      ta formule est k(n-k)! alors qu'elle devrait être k!(n-k)!
    2. Modérateur
      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...
  2. 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.
    1. Modérateur
      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...
  3. Modérateur
    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...