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

Développement SQL Server Discussion :

Exclure tous les champs semblables entre deux tables


Sujet :

Développement SQL Server

  1. #1
    Membre régulier Avatar de Vink80
    Homme Profil pro
    Analyste Développeur BI
    Inscrit en
    Juillet 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste Développeur BI
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 67
    Points : 98
    Points
    98
    Par défaut Exclure tous les champs semblables entre deux tables
    Bonjour,

    Je suis sous SQL Server 2000. J'ai une vue qui m'est fourni par le service pilotage sur les données actuelles. Cette vue comporte 67 champs sans aucune clé primaire. Nous avons de notre côté une table d'historique qui se trouve à être un clone de cette vue, mais nous gardons une copie des données qui sont éliminées par le pilotage système.

    Je veux exclure les données qui sont identiques entre les deux tables avec une correspondance sur les 67 champs. La solution idéale serait d'être sous la version 2005 et de faire un EXCEPT.

    J'ai essayé les solutions suivantes :
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM Table_Historique
    WHERE (NOT EXISTS 
                 (SELECT * 
                   FROM Table_pilotage))
    Ça ne me retourne rien

    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT champ1, champ2, ..., champ67, 'table1' AS tab
    FROM Table_Historique
    UNION ALL
    SELECT champ1, champ2, ..., champ67, 'table2' AS tab
    FROM Table_pilotage
    GROUP BY champ1, champ2, ..., champ67
    HAVING MIN(tab) = 'table1' AND MAX(tab) = 'table1'
    C'est long et laborieux

    3)
    Je me retrouve avec le même problème avec les jointures

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM Table_Historique FULL OUTER JOIN Table_pilotage
                        ON Histo.champ1 = pilotage.champ1, ...., histo.champ67 = pilotage.champ67)
    WHERE champ1 IS NULL
    Comment arriver à mes fins sans être obligé d'écrire tous les champs dans la requête?
    Le but recherché est de remplacer les données encores existantes par les données fraîches du pilotage, mais concerver les données délaissées par celui-ci.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    La solution 3 me semble être la plus propre.

    Quand à l'écriture de toutes les colonnes, aidez-vous des vues système de métadonnées INFORMATION_SCHEMA.COLUMNS

    @++

  3. #3
    Membre régulier Avatar de Vink80
    Homme Profil pro
    Analyste Développeur BI
    Inscrit en
    Juillet 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste Développeur BI
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 67
    Points : 98
    Points
    98
    Par défaut
    Merci du coup de main, mais pourriez-vous me donner un exemple d'application de cela.
    INFORMATION_SCHEMA.COLUMNS.

    Vincent

  4. #4
    Membre régulier Avatar de Vink80
    Homme Profil pro
    Analyste Développeur BI
    Inscrit en
    Juillet 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste Développeur BI
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 67
    Points : 98
    Points
    98
    Par défaut
    Je suis proche d'un résultat, mais j'ai encore quelques petits problèmes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM Table_Histo FULL OUTER JOIN Table_pilotage ON
                (SELECT     COLUMN_NAME
                 FROM INFORMATION_SCHEMA.COLUMNS 
                 WHERE TABLE_NAME = 'Table_Histo') =
                 (SELECT COLUMN_NAME 
                   FROM INFORMATION_SCHEMA.COLUMNS 
                   WHERE TABLE_NAME = 'Table_Pilotage')
    WHERE     Num_contrat_informationnel IS NULL
    Et là je ne peux que retourner une seule valeur avec ça.


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

Discussions similaires

  1. Réponses: 21
    Dernier message: 27/10/2009, 09h18
  2. Réponses: 10
    Dernier message: 17/04/2009, 17h19
  3. comment trouve la difference dans un champ commun entre deux tables
    Par pmorth dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/02/2008, 06h04
  4. afficher les champs null de deux tables dans un select
    Par poil dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/09/2005, 15h05
  5. Tous les champs SAUF dans une table.
    Par Yepazix dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/08/2005, 16h01

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