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 :
et :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Table A : id Nom ------- ----------- 1 Fruit 2 Légume
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 :
J'obtiens :
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();
Et je voudrais :
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
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.
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
Partager