Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre du Club
    Inscrit en
    novembre 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 132
    Points : 43
    Points
    43

    Par défaut Récupérer le différentiel

    Bonjour à tous,

    J'ai une table sur une base oracle ou je récupère la liste des serveurs avec un

    Code :
    select distinct(server_name) from tableA
    Je récupère donc une liste de 789 serveurs.
    J'ai une autre table dans une autre base oracle et je voudrais savoir si j'ai bien tous ces serveurs.
    A l'aide de excel j'ai fait un
    Code :
    select nom_server from tableB where nom_server in (les 789 serveurs)
    J'obtiens 751 résultats. J'aimerais savoir comment connaitre le différentiel entre les 789 serveurs et les 750 résultats pour avoir le nom de ces serveurs?

    J'ai pas trouvé la solution. Faudrait que pour chaque serveur dans la condition in qui ne ramene pas de résultat, j'ai justement un indicateur...
    J'espère m'etre fait comprendre.

    Merci à tout le monde

  2. #2
    Membre Expert
    Inscrit en
    août 2009
    Messages
    1 046
    Détails du profil
    Informations forums :
    Inscription : août 2009
    Messages : 1 046
    Points : 1 750
    Points
    1 750

    Par défaut

    Très simplement !
    Il s'agit de récupérer tous les serveurs de tableB qui n'existent pas dans tableA, ça s'écrit exactement comme se conçoit :
    Code :
    1
    2
    3
    4
     
    SELECT b.nom_server 
      FROM tableB b
    WHERE NOT EXISTS (SELECT 1 FROM tableA a WHERE a.nom_server = b.nom_server)

  3. #3
    Membre du Club
    Inscrit en
    novembre 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 132
    Points : 43
    Points
    43

    Par défaut

    Oui mais ce n'est pas possible, je me suis mal exprimé, mais les deux bases oracles sont sur deux serveurs différents et y a pas de flux entre les deux.
    Je peux interroger les deux de mon poste mais faire une jointure ne marchera pas.

    Je me demandais si c'était pas possible de créer une table virtuelle à l'aide d'une requete (et non physiquement avec un create table) et de cette table faire le NOT EXIST. Mais j'y suis pas arrivé...

  4. #4
    Membre Expert
    Inscrit en
    août 2009
    Messages
    1 046
    Détails du profil
    Informations forums :
    Inscription : août 2009
    Messages : 1 046
    Points : 1 750
    Points
    1 750

    Par défaut

    Si vous contrôlez bien les valeurs en entrée (et qu'il n'y a pas de NULL), faites un NOT IN :

    Code :
    1
    2
     
    SELECT nom_server FROM tableB WHERE nom_server NOT IN (les 789 serveurs)
    Il n'y a pas moyen d'avoir un DBLink entre ces deux serveurs ?

  5. #5
    Membre du Club
    Inscrit en
    novembre 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 132
    Points : 43
    Points
    43

    Par défaut

    Malheureusement non y a pas moyen car faut d'abord demander une ouverture de flux entre les deux machines et ca prend 1 mois ici

    Merci pour la réponse

    Cela dit je suis toujours curieux de savoir comment créer une table temporaire avec des valeurs et faire un select dessus mais sans passer par la vraie creation de table. Avec un select et un with TableTemp as ...
    Quelque chose dans le style ca doit surement exister...

    Mais c'est bon j'ai ma réponse pour ma première demande, merci!

  6. #6
    Membre Expert
    Inscrit en
    août 2009
    Messages
    1 046
    Détails du profil
    Informations forums :
    Inscription : août 2009
    Messages : 1 046
    Points : 1 750
    Points
    1 750

    Par défaut

    Sous Oracle, pour émuler avec WITH une table :


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    WITH TableTemp AS 
    (
    SELECT 1 AS id, 'Serv1' AS Nom_Server FROM DUAL 
    -- Histoire de faire comme une vraie table, bien sûr il faut mettre ce dont on a besoin
    UNION ALL
    SELECT 2 AS id, 'Serv2' AS Nom_Server FROM DUAL
    UNION ALL
    SELECT 3 AS id, 'Serv3' AS Nom_Server FROM DUAL
    UNION ALL
    SELECT 4 AS id, 'Serv4' AS Nom_Server FROM DUAL
    -- etc.
    )
    SELECT b.nom_server 
      FROM tableB b
    WHERE NOT EXISTS (SELECT 1 FROM TableTemp a WHERE a.nom_server = b.nom_server)

  7. #7
    Membre du Club
    Inscrit en
    novembre 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 132
    Points : 43
    Points
    43

    Par défaut

    Hoo Merci Rei Ichido, c'est exactement ce que je cherchais!!

    Merci beaucoup!

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •