Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/01/2012, 15h17   #1
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Par défaut Jointure dans un UPDATE

Bonjour,

Sous MySQL, on peut faire ce genre de requête :
Code :
1
2
3
4
UPDATE une_table A
INNER JOIN une_autre_table B ON condition_de_jointure
SET A.une_colonne = 'une_valeur'
WHERE B.une_autre_colonne = 'une_autre_valeur'
Je viens d'essayer sous Oracle 11G et j'ai une belle erreur à la ligne 1 qui me dit que le mot clé SET est absent.

C'est une syntaxe impossible ou il faut écrire la jointure autrement ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 15h23   #2
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Code :
1
2
3
4
5
UPDATE une_table A
SET A.une_colonne =(select une_valeur
FROM une_autre_table B 
WHERE B.une_autre_colonne = 'une_autre_valeur')
En admettant qu une autre valeur ne soit pas un champ de la table A
Sinon
Code :
1
2
3
4
5
6
7
8
UPDATE une_table A
SET A.une_colonne =(select une_valeur
FROM une_autre_table B 
WHERE B.une_autre_colonne = a.une_autre_colonne)
AND EXISTS (select 1
FROM une_autre_table B 
WHERE B.une_autre_colonne = a.une_autre_colonne)
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 15h43   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
J'ai réussi de cette manière :
Code :
1
2
3
4
5
6
7
8
UPDATE une_table A
SET une_colonne = 'une_valeur'
WHERE A.fk IN
(
    SELECT pk
    FROM une_autre_table
    WHERE une_autre_colonne = 'une_autre_valeur'
)
Mais je trouve ça moins joli que la jointure même si elle ne se trouve pas dans le livre de SQLPro pour l'UPDATE ni pour l'INSERT.

Merci quand même pour la réponse.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 15h53   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 688
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 688
Points : 10 444
Points : 10 444
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
En effet la syntaxe MySQL ne fonctionne pas sur Oracle. Idem pour la syntaxe SQL-Server (que personnellement je trouve la plus pratique).

Cf. l'article de Laurent Navarro :
http://lnavarro.developpez.com/oracle/updatemerge/

Ou celui de Pacmann (bien lire le commentaire de Mnitu) :
http://pacmann.over-blog.com/article...#anchorComment

Ces syntaxes sont surtout utiles pour mettre à jour des valeurs qui dépendent d'une autre table.
Pour mettre à jour une constante, le WHERE IN ou WHERE EXISTS est tout-à-fait indiqué.

Edit : les liens et d'autres sont présent dans le sujet de mise à dispo de l'article :
http://www.developpez.net/forums/d11...s-sous-oracle/
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 22h01   #5
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 316
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 316
Points : 5 822
Points : 5 822
Jonathan Lewis à écrit quelques articles sur son blog traitant ce sujet
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h59.


 
 
 
 
Partenaires

Hébergement Web