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

Requêtes MySQL Discussion :

jointure avec résultat sur 3 colonnes


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut jointure avec résultat sur 3 colonnes
    Bonjour,

    Voici mes tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    CREATE TABLE SERVER (
    ID_SERVER INT NOT NULL AUTO_INCREMENT,
    DATE_SERVER TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    IP_REQ_SERVER VARCHAR(15),
    STATUS_SERVER VARCHAR(50),
    NAME_SERVER  VARCHAR(50) NOT NULL,
    DESC_SERVER VARCHAR(1000),
    COM_SERVER VARCHAR(1000),
    PRIMARY KEY (ID_SERVER),
    UNIQUE KEY (NAME_SERVER)
    ); 
     
    CREATE TABLE APP (
    ID_APP INT NOT NULL AUTO_INCREMENT,
    DATE_APP TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    IP_REQ_APP VARCHAR(15),
    STATUS_APP VARCHAR(50),
    NAME_APP VARCHAR(50) NOT NULL,
    DESC_APP VARCHAR(1000),
    COM_APP VARCHAR(1000),
    DOC_APP VARCHAR(1000),
    CODE_APP VARCHAR(1000),
    PRIMARY KEY (ID_APP),
    UNIQUE KEY (NAME_APP)
    ); 
     
    CREATE TABLE RPA (
    ID_RPA INT NOT NULL AUTO_INCREMENT,
    DATE_RPA TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    IP_REQ_RPA VARCHAR(15),
    STATUS_RPA VARCHAR(50),
    NAME_RPA VARCHAR(50) NOT NULL,
    COM_RPA VARCHAR(1000),
    PRIMARY KEY (ID_RPA),
    UNIQUE KEY (NAME_RPA)
    ); 
     
    CREATE TABLE ENV (
    ID_ENV INT NOT NULL AUTO_INCREMENT,
    DATE_ENV TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    IP_REQ_ENV VARCHAR(15),
    STATUS_ENV VARCHAR(50),
    NAME_ENV VARCHAR(50) NOT NULL,
    DESC_ENV VARCHAR(1000),
    COM_ENV VARCHAR(1000),
    PRIMARY KEY (ID_ENV),
    UNIQUE KEY (NAME_ENV)
    ); 
     
    CREATE TABLE HOST (
    ID_APP INT NOT NULL,
    ID_ENV INT NOT NULL,
    ID_SERVER INT NOT NULL,
    FOREIGN KEY (ID_APP) REFERENCES APP(ID_APP),
    FOREIGN KEY (ID_ENV) REFERENCES ENV(ID_ENV),
    FOREIGN KEY (ID_SERVER) REFERENCES SERVER(ID_SERVER),
    PRIMARY KEY (ID_APP, ID_ENV, ID_SERVER)
    ); 
     
    CREATE TABLE RESPONSIBLE (
    ID_APP INT NOT NULL,
    ID_RPA INT NOT NULL,
    FOREIGN KEY (ID_APP) REFERENCES APP(ID_APP),
    FOREIGN KEY (ID_RPA) REFERENCES RPA(ID_RPA),
    PRIMARY KEY (ID_APP, ID_RPA)
    ); 
     
     
    CREATE TABLE USER (
    ID_USER INT NOT NULL AUTO_INCREMENT,
    LOGIN_USER VARCHAR(50) NOT NULL,
    PWD_USER VARCHAR(50) NOT NULL,
    PRIMARY KEY (ID_USER)
    );
    Avec cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT
    ENV.NAME_ENV,ENV.ID_ENV,T1.NAME_SERVER
    FROM
    ENV
    LEFT JOIN
    (SELECT  SERVER.NAME_SERVER , HOST.ID_ENV FROM HOST,SERVER
    WHERE  HOST.ID_SERVER=SERVER.ID_SERVER
    AND SERVER.NAME_SERVER ='TITI'
    ) AS T1
    ON
    ENV.ID_ENV = T1.ID_ENV;
    Avec un paramètre : NAME_SERVER ='TITI'
    J'arrive à sortir les informations suivantes :

    Pour un serveur donné qui s'appel TITI je sais qu'il est affecté à l’environnement de PROD et DEV.

    +----------+--------+-------------+
    | NAME_ENV | ID_ENV | NAME_SERVER |
    +----------+--------+-------------+
    | PROD | 1 | TITI |
    | RECETTE | 2 | NULL |
    | DEV | 3 | TITI |
    +----------+--------+-------------+

    Maitenant, avec 2 paramètres :

    NAME_SERVER ='TITI'
    NAME_APP ='APPTEST1'

    je voudrais sortir les infos suivantes :

    +----------+-------------+----------+
    | NAME_ENV | NAME_SERVER | NAME_APP |
    +----------+-------------+----------+
    | PROD | TITI | APPTEST1 |
    | RECETTE | NULL | NULL |
    | INT | NULL | NULL |
    | DEV | TITI | APPTEST1 |

    Ainsi je peux savoir pour mon serveur TITI et pour l'application APPTEST1 sur quel environnement ils se trouvent.

    Comment modéliser cette seconde requête svp ??

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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,

    dupliquer les postes ca sert à rien.

    Les jointures c'est ici : http://sqlpro.developpez.com/cours/sqlaz/jointures/


    Procédez par étape :
    - reprenez votre sous requête et afficher toutes les données utiles à votre besoin
    - intégrez-la dans votre requête principale.


    Faites des tests .. revenez avec vos requêtes et décrivez les problèmes rencontrés


    Là y a rien de compliqué pour peu que vous y passiez 15 minutes

    +

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    ok j'ai regardé et j'ai effectué la requette suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT e.NAME_ENV, e.ID_ENV,
    s.NAME_SERVER,
    CASE
    WHEN s.NAME_SERVER IS NULL THEN NULL
    ELSE a.NAME_APP 
    END AS NAME_APP
    FROM ENV e
    LEFT OUTER JOIN HOST h ON h.ID_ENV = e.ID_ENV
    LEFT OUTER JOIN SERVER s
    ON s.ID_SERVER = h.ID_SERVER
    AND s.NAME_SERVER = 'MONSERVEUR'
    LEFT OUTER JOIN APP a ON a.ID_APP = h.ID_APP;
    Ce qui me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    +-------------+--------+-------------+----------+
    | NAME_ENV    | ID_ENV | NAME_SERVER | NAME_APP |
    +-------------+--------+-------------+----------+
    | PROD        |      1 | NULL        | NULL     |
    | PROD        |      1 | NULL        | NULL     |
    | PROD        |      1 | NULL        | NULL     |
    | PROD        |      1 | NULL        | NULL     |
    | PROD        |      1 | MONSERVEUR  | APPTEST1 |
    | PROD        |      1 | NULL        | NULL     |
    | RECETTE     |      2 | NULL        | NULL     |
    | RECETTE     |      2 | NULL        | NULL     |
    | RECETTE     |      2 | MONSERVEUR  | APPTEST1 |
    | DEV         |      3 | NULL        | NULL     |
    | DEV         |      3 | MONSERVEUR  | APPTEST2 |
    | INTEGRATION |      4 | MONSERVEUR  | APPTEST3 |
    | INTEGRATION |      4 | NULL        | NULL     |
    +-------------+--------+-------------+----------+
    Cependant ca me liste APPTEST1, APPTEST2, APPTEST3.

    Comment faire pour ajouter une clause dans ma requete :

    AND a.NAME_APP = 'APPTEST1'

    Je n'arrive pas à la positionner, et j'ai une erreur.

    Meric d'avance.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 051
    Points
    34 051
    Billets dans le blog
    14
    Par défaut
    Comme ta condition concerne la table externe de la dernière jointure, il faut mettre cette condition de restriction avec la condition de jointure.

    Voir mon blog pour plus d'explications.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Merci pour ta réponse, j'ai fait ca mais sinon je ne vois pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT DISTINCT e.NAME_ENV, e.ID_ENV,
    s.NAME_SERVER,
    CASE
    WHEN s.NAME_SERVER IS NULL THEN NULL
    ELSE a.NAME_APP 
    END AS NAME_APP
    FROM ENV e
    LEFT OUTER JOIN HOST h ON h.ID_ENV = e.ID_ENV
    LEFT OUTER JOIN SERVER s
    ON s.ID_SERVER = h.ID_SERVER
    AND s.NAME_SERVER = 'AZERTY'
    LEFT OUTER JOIN APP a ON a.ID_APP = h.ID_APP
    AND a.NAME_APP = 'APPTEST1';

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 051
    Points
    34 051
    Billets dans le blog
    14
    Par défaut
    Et ça donne ce que tu veux ou pas ?

    Si oui :

    Si non : explique mieux ce qui coince et ce que tu attends, donne la description exacte de tes tables, un jeu de données et le résultat attendu.

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Ca me sort :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    +-------------+--------+-------------+----------+
    | NAME_ENV    | ID_ENV | NAME_SERVER | NAME_APP |
    +-------------+--------+-------------+----------+
    | PROD        |      1 | NULL        | NULL     |
    | PROD        |      1 | AZERTY      | APPTEST1 |
    | RECETTE     |      2 | NULL        | NULL     |
    | RECETTE     |      2 | AZERTY      | APPTEST1 |
    | DEV         |      3 | AZERTY      | NULL     |
    | DEV         |      3 | NULL        | NULL     |
    | INTEGRATION |      4 | NULL        | NULL     |
    +-------------+--------+-------------+----------+
    Donc j'ai bien mes infos correctes qui remontent, sauf que j'ai des doublons :

    cf capture d'écran, je ne vois pas comment faire pour enlever les doublons.

    Merci encore.
    Images attachées Images attachées  

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    bon je suis parti sur une autre requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT
    DISTINCT ENV.NAME_ENV, ENV.ID_ENV, T1.NAME_APP, T1.ID_APP
    FROM
    ENV
    left join
    (SELECT  APP.NAME_APP , APP.ID_APP, HOST.ID_ENV FROM HOST,APP
    WHERE  HOST.ID_APP=APP.ID_APP
    AND APP.NAME_APP ='APPTEST1') AS T1
    on
    ENV.ID_ENV = T1.ID_ENV;
    Qui me sort les colonnes :

    +-------------+--------+----------+--------+
    | NAME_ENV | ID_ENV | NAME_APP | ID_APP |
    +-------------+--------+----------+--------+
    Maintenant je voudrais ajouter 2 autres colonnes :

    +-------------+--------+----------+--------+-------------+-------------+
    | NAME_ENV | ID_ENV | NAME_APP | ID_APP | NAME_SERVER | ID_SERVER |
    +-------------+--------+----------+--------+-------------+-------------+
    Je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SELECT
    DISTINCT ENV.NAME_ENV, ENV.ID_ENV, T1.NAME_APP, T1.ID_APP, T2.NAME_SERVER, T2.ID_SERVER 
    FROM
    ENV
    left join
    (SELECT  APP.NAME_APP , APP.ID_APP, HOST.ID_ENV FROM HOST,APP
    WHERE  HOST.ID_APP=APP.ID_APP
    AND APP.NAME_APP ='APPTEST1') AS T1
    on
    ENV.ID_ENV = T1.ID_ENV
    left join
    (SELECT  SERVER.NAME_SERVER , SERVER.ID_SERVER, HOST.ID_APP FROM HOST,SERVER
    WHERE  HOST.ID_SERVER=SERVER.ID_SERVER
    AND SERVER.NAME_SERVER ='MONSERVEUR') AS T2
    on
    APP.ID_APP = T2.ID_APP;
    Mais ca me sort "ERROR 1054 (42S22): Unknown column 'APP.ID_APP' in 'on clause'
    "

    une idée ??

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Il faut utiliser T1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON T1.ID_APP = T2.ID_APP;
    Je voudrais bien t'aider plus, mais je n'ai toujours pas compris ce que tu souhaites faire.

    Lorsque je lis ceci :
    Ainsi je peux savoir pour mon serveur TITI et pour l'application APPTEST1 sur quel environnement ils se trouvent.
    Je comprends qu'il faut faire ceci (désolé pour les alias ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT NAME_ENV, ID_ENV,NAME_APP, ID_APP, NAME_SERVER, ID_SERVER
    FROM ENV 
    INNER JOIN HOST
    USING(ID_ENV)
    INNER JOIN SERVER
    USING(ID_SERVER)
    INNER JOIN APP
    USING(ID_APP)
    WHERE NAME_SERVER = 'AZERTY'
    AND   NAME_APP = 'APPTEST1';

  10. #10
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    bonjour Frédéric, merci pour ta réponse.

    C'est presque le résultat que j’attends merci.

    Ca m'affiche toutes les colonnes que je veux c'est parfait

    +----------+--------+----------+--------+-------------+-----------+
    | NAME_ENV | ID_ENV | NAME_APP | ID_APP | NAME_SERVER | ID_SERVER |
    +----------+--------+----------+--------+-------------+-----------+
    | RECETTE | 2 | APPTEST1 | 1 | MONSERVEUR | 10 |
    | PROD | 1 | APPTEST1 | 1 | MONSERVEUR | 10 |
    +----------+--------+----------+--------+-------------+-----------+
    Cependant je voudrais lister l'ensemble de mes environnements existants :

    pour que ca donne une vue comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    +----------+--------+----------+--------+-------------+-----------+
    | NAME_ENV | ID_ENV | NAME_APP | ID_APP | NAME_SERVER | ID_SERVER |
    +----------+--------+----------+--------+-------------+-----------+
    | PROD     |      1 | APPTEST1 |      1 | MONSERVEUR  |        10 |
    | INTEG    |      2 | NULL 	   | NULL   | NULL        |      NULL |
    | RECETTE  |      3 | APPTEST1 |      1 | MONSERVEUR  |        10 |
    | DEV      |      4 | NULL 	   | NULL   | NULL        |      NULL |
    | TEST     |      5 | NULL 	   | NULL   | NULL        |      NULL |
    +----------+--------+----------+--------+-------------+-----------+
    Merci encore pour ton aide

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    C'est de la bidouille, mais à mon avis ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT NAME_ENV, ID_ENV,MAX(NAME_APP), MAX(ID_APP), MAX(NAME_SERVER), MAX(ID_SERVER)
    FROM ENV 
    LEFT OUTER JOIN HOST
    USING(ID_ENV)
    LEFT OUTER JOIN SERVER
    USING(ID_SERVER)
    LEFT OUTER JOIN APP
    USING(ID_APP)
    WHERE NAME_SERVER IN('AZERTY',null)
    AND   NAME_APP IN('APPTEST1',null)
    GROUP BY NAME_ENV, ID_ENV

  12. #12
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    marche pas ca m'affiche la meme chose


    +----------+--------+---------------+-------------+------------------+----------------+
    | NAME_ENV | ID_ENV | MAX(NAME_APP) | MAX(ID_APP) | MAX(NAME_SERVER) | MAX(ID_SERVER) |
    +----------+--------+---------------+-------------+------------------+----------------+
    | PROD | 1 | APPTEST1 | 1 | MONSERVEUR | 10 |
    | RECETTE | 2 | APPTEST1 | 1 | MONSERVEUR | 10 |
    +----------+--------+---------------+-------------+------------------+----------------+

    ce que je souhaite :

    +----------+--------+----------+--------+-------------+-----------+
    | NAME_ENV | ID_ENV | NAME_APP | ID_APP | NAME_SERVER | ID_SERVER |
    +----------+--------+----------+--------+-------------+-----------+
    | PROD | 1 | APPTEST1 | 1 | MONSERVEUR | 10 |
    | INTEG | 2 | NULL | NULL | NULL | NULL |
    | RECETTE | 3 | APPTEST1 | 1 | MONSERVEUR | 10 |
    | DEV | 4 | NULL | NULL | NULL | NULL |
    | TEST | 5 | NULL | NULL | NULL | NULL |
    +----------+--------+----------+--------+-------------+-----------+

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Surement comme ça alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT NAME_ENV, ID_ENV,MAX(NAME_APP), MAX(ID_APP), MAX(NAME_SERVER), MAX(ID_SERVER)
    FROM ENV 
    LEFT OUTER JOIN HOST
    USING(ID_ENV)
    LEFT OUTER JOIN SERVER
    USING(ID_SERVER)
    LEFT OUTER JOIN APP
    USING(ID_APP)
    WHERE (NAME_SERVER='AZERTY' OR  NAME_SERVER IS NULL)
    AND   (NAME_APP='APPTEST1' OR  NAME_APP IS NULL)
    GROUP BY NAME_ENV, ID_ENV
    Je vais allez lire le blog de Cinephil pour savoir si il y aurait une remarque sur ce genre de condition.
    Edit: Il n'y a pas. Mais je viens de voir qu'il ne faut pas utiliser null dans un IN.

  14. #14
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    idem je craque ...

    Merci encore :

    +----------+--------+---------------+-------------+------------------+----------------+
    | NAME_ENV | ID_ENV | MAX(NAME_APP) | MAX(ID_APP) | MAX(NAME_SERVER) | MAX(ID_SERVER) |
    +----------+--------+---------------+-------------+------------------+----------------+
    | PROD | 1 | APPTEST1 | 1 | MONSERVEUR | 10 |
    | RECETTE | 2 | APPTEST1 | 1 | MONSERVEUR | 10 |
    +----------+--------+---------------+-------------+------------------+----------------+

  15. #15
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 051
    Points
    34 051
    Billets dans le blog
    14

  16. #16
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par b.gaumard Voir le message
    idem je craque ...
    Ce coup-ci, je ne vois vraiment pas d'ou pourrait venir le problème.

    Peux tu donner un jeu de données?
    Vu que tu as déjà envoyé la structure de tes tables, cela me sera facile de faire un test rapide.

    Edit (En modifiant les jointures):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT NAME_ENV, ID_ENV,MAX(NAME_APP), MAX(HOST.ID_APP), MAX(NAME_SERVER), MAX(HOST.ID_SERVER)
    FROM ENV 
    LEFT OUTER JOIN HOST
    USING(ID_ENV)
    LEFT OUTER JOIN SERVER
    ON HOST.ID_SERVER=SERVER.ID_SERVER AND NAME_SERVER='AZERTY'
    LEFT OUTER JOIN APP
    ON HOST.ID_APP=APP.ID_APP AND NAME_APP='APPTEST1'
    GROUP BY NAME_ENV, ID_ENV

  17. #17
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    C'est celui-ci dont je parlais.

    Je voulais chercher quelque chose du genre est-ce que cette requète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.idA, A.valA, B.idB, B.valB, B.booleen 
     FROM A 
     LEFT OUTER JOIN B ON B.idA = A.idA 
      AND B.booleen = 1
    Est équivalente à celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.idA, A.valA, B.idB, B.valB, B.booleen 
     FROM A 
     LEFT OUTER JOIN B ON B.idA = A.idA 
     WHERE B.booleen = 1 OR B.booleen IS NULL

  18. #18
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 051
    Points
    34 051
    Billets dans le blog
    14
    Par défaut
    À tester mais je pense que oui.

  19. #19
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Merci Frederic pour ton aide .....

    Je vais reprendre de zero et ouvrir un topic dans PHP MYsql Merci beaucoup ...
    Images attachées Images attachées      

  20. #20
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT e.NAME_ENV, e.ID_ENV, t.NAME_SERVER, t.name_app
      FROM ENV e
      LEFT JOIN (select h.id_env, s.NAME_SERVER, a.NAME_APP
                   from HOST h
                   join SERVER s ON s.ID_SERVER = h.ID_SERVER
                   JOIN APP a ON a.ID_APP = h.ID_APP;
                  where s.NAME_SERVER = 'MONSERVEUR'
                    and a.name_app = 'APPTEST1') t
             on t.id_env = e.id_env
    Sinon merci de fournir un jeu de test (quelques lignes dans les différentes tables)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL-5.1] Jointure avec * sauf sur une colonne spécifique
    Par bronon dans le forum Requêtes
    Réponses: 10
    Dernier message: 09/10/2014, 12h26
  2. Nb.si avec conditions sur 2 colonnes
    Par Gary dans le forum Excel
    Réponses: 1
    Dernier message: 08/08/2007, 15h19
  3. [VBA-E] Minimum d'une colonne avec condition sur autre colonne
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2007, 17h01
  4. [Tableaux] Affichage d'un résultat sur pls colonnes
    Par mullger dans le forum Langage
    Réponses: 5
    Dernier message: 23/11/2006, 13h18
  5. Jointure avec conditions sur plusieurs colonnes
    Par ben53 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 28/11/2005, 09h27

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