p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Expert Confirmé Avatar de Madfrix
    Profil pro
    Inscrit en
    juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : juin 2007
    Messages : 2 326
    Points : 2 535
    Points
    2 535

    Par défaut Algorithme pour une requête

    Hello,

    Admettons 3 colonnes x, y, z d'une table au format numérique.

    Champs des possibles :

    • x-> [1-9]
    • y-> [1-500]
    • z-> [1-15]


    Ce sont en fait des coordonnées au format (x,y,z). Nous pouvons donc avoir par exemple les coordonnées (2,458,3) ou (1,500,15), etc. Il y a donc au total 9*500*15 = 67500 possibilités.

    Ce que je souhaite faire, c'est trouver toutes les coordonnées "non prises". Par exemple si j'ai 438 coordonnées prises, je souhaite une requête me retournant toutes les 67500-438=67062 coordonnées restantes.

    J'avais déjà fait il y a quelques années une requête de ce style avec une table "témoin" contenant toutes mes coordonnées et je faisais une sorte de MINUS pour trouver les coordonnées restantes.

    Ce que je souhaite savoir, c'est si, pour ce genre de requête, on peut éviter de créer une nouvelle table ? Faire une requête SQL qui elle même génère "en interne" les 67500 possibilités afin de trouver les coordonnées non prises ?

    Merci
    Je ne réponds pas aux questions envoyées par mp

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    avril 2002
    Messages
    5 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : avril 2002
    Messages : 5 369
    Points : 20 286
    Points
    20 286

    Par défaut

    Bonjour,

    Il n'est pas nécessaire de créer une table temporaire pour cela, la fonction generate_series() fait l'affaire.
    Pour générer toutes les combinaisons possibles dans ton cas, la requête suivante suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select x, y, z
    from generate_series(1, 9) as x
    CROSS JOIN generate_series(1, 500) as y
    CROSS JOIN generate_series(1, 15) as z
    order by 1, 2, 3;
    Ne reste plus qu'à faire une jointure externe entre cette première requête et les triplets dont tu disposes, pour ne garder que ce qui n'existe pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select t1.x, t1.y, t1.z
    FROM (
        select x, y, z
        from generate_series(1, 9) as x
        CROSS JOIN generate_series(1, 500) as y
        CROSS JOIN generate_series(1, 15) as z
    ) AS t1
    LEFT JOIN ta_table t2 ON t1.x = t2.x AND t1.y = t2.y AND t1.z = t2.z
    WHERE t2.x IS NULL
    ORDER BY t1.x, t1.y, t1.z
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Expert Confirmé Avatar de Madfrix
    Profil pro
    Inscrit en
    juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : juin 2007
    Messages : 2 326
    Points : 2 535
    Points
    2 535

    Par défaut

    Whoo épatant cette petite fonction generate_series() que je ne connaissais pas (mon ancienne requête était faite sous MySQL).

    Je vais pouvoir m'en sortir facilement, tu m'as mâché le travail

    Merci beaucoup !
    Je ne réponds pas aux questions envoyées par mp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/06/2005, 00h31
  2. J'ai besoin de votre aide pour une requête
    Par ovdz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2005, 11h42
  3. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo