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

SQL Oracle Discussion :

Requête MINUS ramène un enregistrement identique entre 2 tables [11g]


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de tagada37
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Par défaut Requête MINUS ramène un enregistrement identique entre 2 tables
    bonjour,
    je cherche à sortir les différences de données entre des deux tables qui ont exactement la même structure et les même ID. Seuls certaines colonnes peuvent différer.. et c'est en général sur le libellé.
    exemple :

    Code DATAS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                       ID_ERR	       LB_ERR 	
                       --------          ---------------------
    tableA            1550	        La fonction n'exige pas que le suivi ne soit pas saisi	
    tableB            1550		La fonction exige que le suivi ne soit pas saisi

    la requête devra donc me renvoyer 1550 (et du reste ça fonctionne avec ma requête qui suit).

    J'ai utilisé MINUS qui me semblait le + approprié.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select  * from tableA   MINUS select  * from tableB ;

    ça fonctionne bien, excepté pour 1 enregistrement qui est pourtant rigoureusement identique entre les deux tables (j'ai fait une analyse dans UltraEdit, ainsi qu'une recopie de la ligne d'une table à l'autre pour m'en assurer et Oracle n'a pas détecté de différences ).

    voici les lignes concernées :

    Classeur2.xlsx

    base Oracle 11G.

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Fais un dump de tes colonnes pour voir les différences internes au niveau Oracle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 'A' nomtab, DUMP(CD_ERR_ERR), DUMP(LB_ERR_ERR), DUMP(CD_APL_ERR), DUMP(CD_REG_ERR), DUMP(IN_MOD_ERR), DUMP(CO_ERR), DUMP(IN_S_ERR), DUMP(IN_A_ERR), DUMP(IN_I_ERR), DUMP(IN_E_ERR)
    FROM TABLEA
    WHERE iD_ERR = 1804
    UNION ALL
    SELECT 'B' nomtab, DUMP(CD_ERR_ERR), DUMP(LB_ERR_ERR), DUMP(CD_APL_ERR), DUMP(CD_REG_ERR), DUMP(IN_MOD_ERR), DUMP(CO_ERR), DUMP(IN_S_ERR), DUMP(IN_A_ERR), DUMP(IN_I_ERR), DUMP(IN_E_ERR)
    FROM TABLEB
    WHERE iD_ERR = 1804

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    sinon pour voir quelles colonnes sont différentes :
    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
    SELECT 
    	CASE WHEN a.CD_ERR_ERR <> b.CD_ERR_ERR THEN 'X' END CD_ERR_ERR,
    	CASE WHEN a.LB_ERR_ERR <> b.LB_ERR_ERR THEN 'X' END LB_ERR_ERR,
    	CASE WHEN a.CD_APL_ERR <> b.CD_APL_ERR THEN 'X' END CD_APL_ERR,
    	CASE WHEN a.CD_REG_ERR <> b.CD_REG_ERR THEN 'X' END CD_REG_ERR,
    	CASE WHEN a.IN_MOD_ERR <> b.IN_MOD_ERR THEN 'X' END IN_MOD_ERR,
    	CASE WHEN a.CO_ERR <> b.CO_ERR THEN 'X' END CO_ERR,
    	CASE WHEN a.IN_S_ERR <> b.IN_S_ERR THEN 'X' END IN_S_ERR,
    	CASE WHEN a.IN_A_ERR <> b.IN_A_ERR THEN 'X' END IN_A_ERR,
    	CASE WHEN a.IN_I_ERR <> b.IN_I_ERR THEN 'X' END IN_I_ERR,
    	CASE WHEN a.IN_E_ERR <> b.IN_E_ERR THEN 'X' END IN_E_ERR
    FROM 
    (SELECT CD_ERR_ERR, LB_ERR_ERR, CD_APL_ERR, CD_REG_ERR, IN_MOD_ERR, CO_ERR, IN_S_ERR, IN_A_ERR, IN_I_ERR, IN_E_ERR
    FROM TABLEA WHERE iD_ERR = 1804) a, 
    (SELECT CD_ERR_ERR, LB_ERR_ERR, CD_APL_ERR, CD_REG_ERR, IN_MOD_ERR, CO_ERR, IN_S_ERR, IN_A_ERR, IN_I_ERR, IN_E_ERR
    FROM TABLEB WHERE iD_ERR = 1804) b

  4. #4
    Membre averti Avatar de tagada37
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Par défaut
    Voici le résultat export.xlsx

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Copie ton export sous UltraEdit, tu verras la différence sur CO_ERR

  6. #6
    Membre averti Avatar de tagada37
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Par défaut
    2 codes 13 manquaient dans la 2e base.
    donc 2 retours chariots (code 13 : retour chariot)


    ce que je capte pas, c'est que sous UE32, on voyait bien les 2 retours chariots quand j'ai copié les données.

    du reste si je copie colle le record depuis SQL Developer, on voit bien qu'il y a un retour chariot.

    "Veuillez sélectionner une commune compatible avec le code postal ou modifier le code postal.
    Il est possible de ne saisir que le code département dans le code postal si vous ignorez celui-ci.
    "

    "Veuillez sélectionner une commune compatible avec le code postal ou modifier le code postal.
    Il est possible de ne saisir que le code département dans le code postal si vous ignorez celui-ci.
    "

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    La différence entre les chr(13) chr(10) (Windows) et les chr(10) (Linux) posent souvent des problèmes et la détection peut s'avérer difficile si tu récupères les données en passant par différents outils : export sqldev, copier /coller, Ultraedit, puis ensuite ton regard
    J'ai eu le cas d'un fichier texte multibytes, mes collègues ont du faire appel à moi, car ils ouvraient avec notepad++ et ne voyaient pas le problème, jusqu'à ce que je leur prouve que la taille du fichier sur le PC était le double du nombre de caractères.

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

Discussions similaires

  1. [WD20] Enregistrements liés entre deux tables
    Par bebert12 dans le forum WinDev
    Réponses: 0
    Dernier message: 16/01/2017, 23h13
  2. Réponses: 2
    Dernier message: 12/01/2016, 20h32
  3. Hash table : enregistrement différents entre deux tables
    Par tidou95220 dans le forum SAS Base
    Réponses: 1
    Dernier message: 08/03/2013, 09h58
  4. Réponses: 7
    Dernier message: 22/08/2007, 11h49
  5. requête montre 3x un enregistrement
    Par Invité dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/01/2004, 20h59

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