IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Comparaison de table et de sous-requête


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    développeur
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Points : 14
    Points
    14
    Par défaut Comparaison de table et de sous-requête
    Table1
    CODE|SERVICE|PARAM |VALEUR
    1 S1 P1 v1
    1 S2 p2 v2
    1 S3 p3 v3
    2 S4 p4 v4
    2 S5 p5 v5
    3 S6 p6 v6

    TABLE2
    CODE| PRODUIT
    1 PROD_1U
    1 PROD_1R
    1 PROD_2R
    2 PROD_2U
    2 PROD_4R
    2 PROD_5R

    TABLE3
    PRODUIT1 PRODUIT2 SERVICE PARAM VALEUR
    PROD_1U PROD_1R S1 P1 V1
    PROD_1U PROD_2R S2 P15 V2
    PROD_1U PROD_2R S3 P2 V3
    PROD_1U S4 P6 V4
    PROD_2U PROD_4R S5 P1 V5
    PROD_2U PROD_4R S6 P2 V6
    PROD_2U S7 P4 V8

    en fait , il s'agit d'écrire une requete qui permet de comparer la table1 avec le résultat d'une requette sur les tables TABLE2 et table3.

    Méthodologie :
    1-On fait dans un premier temps une requete sur les table2 et table3 qui nous donne la même structure que la table1 ; la liaison entre les tables table2 et table3 est les produits , il faut chercher la correspondance des produits qui se trouvent dans la colonne Produit de la table2 et qui se termine par U dans la colonne PRODUIT1 de la table3 et les produits qui se termine par un R dans la 2éme colonne de la table3 , une fois la correspondance est fait , on liste les colonnes SERVICE , PARAM , VALEUR pour avoir la meme structure que la table 1

    2- faire la comparaison entre les table1 et le résultat de la requette fait précédement et afficher un statut "OK" si on a la même valeur dans la colonne "VALEUR" et "KO" si c'est différent entre les deux table .et cela sera fait pour chaque valeur de la colonne "CODE" .

    tout cela doit se faire dans une seule grande requete afin de créer une vue qui affiche la comparaison.

    Ça fait 2 jour que je réfléchie comment je peux la faire , mais je ne sais pas trop par ou je peux commencer . Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    Présente-nous les requêtes que tu as déjà écrites et explique les problèmes que tu rencontres.
    Nous pourrons alors peut-être t'aider à les corriger.

  3. #3
    Membre à l'essai
    Profil pro
    développeur
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    si vous pouvez m'aider déja juste dans la première requette :

    TABLE1
    CODE| PRODUIT
    1 1U
    1 1R
    1 2R
    2 2U
    2 1R
    2 2R

    Table2

    PRODUIT1 PRODUIT2 SERVICE
    1U 1R S1
    1U 2R S2
    1U 3R S3
    1U S4
    2U 1R S5
    2U 2R S6
    2U S8

    je dois pour chaque code dans la table 1 voir si le produit qui se termine par "U" existe dans la premiere colonne de la 2éme table , et voir les produit qui se termine par "R" si ils existe dans la 2éme colonne , si oui on affiche les service .
    en fait je ne sais pas comment faire , si vous pouvez me donner des idées je serais très reconnaisant

  4. #4
    Expert éminent Avatar de garn
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Janvier 2006
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 487
    Points : 6 032
    Points
    6 032
    Par défaut
    Citation Envoyé par yassineonline2013 Voir le message
    je dois pour chaque code dans la table 1 voir si le produit qui se termine par "U" existe dans la premiere colonne de la 2éme table ,
    Premier perimetre de données, obtenir les couples codes/produits dont les produits se terminent par U.
    Ensuite, joindre ces données avec la 2eme table sur le produit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select T2.service 
    from 
    (Select T1.code, T1.produit
    Where RIGHT(T1.produit,1) = "U") T1U, Table2 T2 
    where T1U.produit = T2.produit1
    Ca ce sont la liste des services pour chaque code de table 1 a un produit qui se termine par "U"

    Citation Envoyé par yassineonline2013 Voir le message
    et voir les produit qui se termine par "R" si ils existe dans la 2éme colonne , si oui on affiche les service .
    C'est une condition supplémentaire ? Il faut que la ligne de la table 2 ait un produit 1 qui se termine par U, un produit 2 qui se termine par R, et qu'ils soient présents en table 1 ?
    Dans ta table 2, tu as mis certains services S1, S2, S3... ce sont les services que tu dois retourner dans ton select donc?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Select T2.service 
    from 
    (Select T1.code, T1.produit
    Where RIGHT(T1.produit,1) = "U") T1U, (Select T1.code, T1.produit
    Where RIGHT(T1.produit,1) = "R") T1R, Table2 T2 
    where T1U.produit = T2.produit1
    AND T1R.produit = T2.produit2

    Quelque chose comme ça?

  5. #5
    Membre à l'essai
    Profil pro
    développeur
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT DISTINCT t1a.CODE, t2.*
    FROM table2AS t2
    INNER JOIN table1 AS t1a ON t1a.PRODUCT = t2.PRODUCT1 and t1a.PRODUCT like '%U'
    RIGHT OUTER JOIN  table1 AS t1b ON t1b.PRODUCT = t2.PRODUCT2 and t1b.PRODUCT like '%R' and t1a.CODE= t1b.CODE
    WHERE t1a.CODE IS NOT NULL
    j'ai essayé avec ca , ca a l'air de marcher mais dans le cas ou il ne trouve pas de correspondance des produit qui se termine par "R" je voudrais prendre les valeur null comme correspondance

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    Passez par un test d'existance : http://sqlpro.developpez.com/cours/s...quetes/#L1.5.1

  7. #7
    Membre à l'essai
    Profil pro
    développeur
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    est ce que je peux faire un test après le JOIN ?

  8. #8
    Expert éminent Avatar de garn
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Janvier 2006
    Messages
    1 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 487
    Points : 6 032
    Points
    6 032
    Par défaut
    Citation Envoyé par yassineonline2013 Voir le message
    est ce que je peux faire un test après le JOIN ?
    oui le exist est dans la clause where, donc après join

  9. #9
    Membre à l'essai
    Profil pro
    développeur
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    est ce que je peux faire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RIGHT OUTER JOIN  
    exists (
    table1 AS t1b ON t1b.PRODUCT = t2.PRODUCT2 AND t1b.PRODUCT LIKE '%R' AND t1a.CODE= t1b.CODE ) 
    else t2.PRODUCT2 IS NULL

Discussions similaires

  1. Pagination avec table jointe et sous-requête
    Par dovmeup dans le forum Requêtes
    Réponses: 11
    Dernier message: 30/05/2014, 09h11
  2. Réponses: 0
    Dernier message: 18/09/2013, 12h23
  3. [Vxi3] Table dérivée et sous-requête
    Par 305yalou dans le forum Designer
    Réponses: 5
    Dernier message: 09/07/2010, 10h58
  4. évaluation du nom de la table via une sous requête
    Par _ceone dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 22/10/2007, 15h47
  5. sous-requête sur 1 seule table
    Par By-nôm dans le forum Access
    Réponses: 5
    Dernier message: 02/08/2006, 15h13

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