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 :

MERGE INTO : gestion des clefs


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut MERGE INTO : gestion des clefs
    Excusez-moi, j'ai trouvé une solution comme une grande.
    J'ai créé un attribut qui permet de distinguer la provenance d'une tuple (0 pour table A, 1 pour table B). À partir de là, si le couple (id, provenance) d'une tuple de la base A n'existe pas dans la base B, j'insère avec auto-incrémentation de l'id. Si elle existe, j'update la tuple dans la base B avec les nouvelles valeurs.

    *************************************
    Bonjour,

    Je travaille en Java avec une base H2.

    Je cherche à réunir deux tables (A et B) dont les clefs sont auto incrémentées dans une des tables (B).
    A est une base SQL sur serveur et B une base H2 locale.

    J'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Table A :
    id           Nom
    -------   -----------
    1           Fruit
    2           Légume
    et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Table B :
    id           Nom
    -------   -----------
    1           Viande
    5           Poisson

    Je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    query = sqlStmt.executeQuery("SELECT * FROM A;");
    while(query.next()){
    	h2pstmt = h2.prepareStatement("MERGE INTO B KEY (id) VALUES(?,?);");
    	h2pstmt.setInt(1, query.getInt("id"));
    	h2pstmt.setString(2, query.getString("Nom"));
    }
    h2pstmt.executeUpdate();
    J'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Table B :
    id           Nom
    -------   -----------
    1           Fruit
    2           Légume
    5           Poisson
    Et je voudrais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Table B :
    id           Nom
    -------   -----------
    1           Viande
    5           Poisson
    6           Légume
    7           Fruit
    En gros, je cherche une méthode pour distinguer les mises à jour de données et l'insertion de nouvelles tuples. Donc éviter qu'une tuple de la table A écrase une tuple de la table B parce qu'elles ont les mêmes ids.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Je ne sais pas si ce SGBDR supporte les assertions qui font partie de la norme SQL, mais la solution est là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE ASSERTION ASR_UNIQUE_AB
    CHECK NOT EXISTS(SELECT *
                     FROM   TABLEA AS A
                            INNER JOIN TABLEB AS B
                                  ON A.ID = B.ID)
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [phpMyAdmin] gestion des clefs (clés) étrangères
    Par ledisciple dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 29/03/2011, 17h23
  2. Gestion des doublons sur une clef inversée
    Par Sve@r dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/12/2010, 17h47
  3. KDE sous Ubuntu : gestion des clefs USB
    Par troumad dans le forum Ubuntu
    Réponses: 2
    Dernier message: 12/05/2009, 20h40
  4. Gestion des erreurs (doublon clef primaire)
    Par capitaine dans le forum Access
    Réponses: 3
    Dernier message: 19/06/2006, 12h22
  5. [SGBDR] Gestion des clefs
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 24/07/2005, 17h25

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