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 17/11/2011, 17h10   #1
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 392
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 392
Points : 439
Points : 439
Par défaut Ordre d'exécution requête update where exists

Bonjour à tous,

je veux mettre à jour les champs de la table 1 à partir de des champs de la table 2 avec une condition sur une date dans la table 1 afin de ne pas ramener trop d'enregistrement.
pouvez vous me renseigner sur l'ordre de traitement dans la requête suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
UPDATE TABLE_1 T1
SET (CHAMPS_1,CHAMPS_2)
(
SELECT CHAMPS_1, CHAMPS_2
FROM TABLE_2 T2 
WHERE T2.NUM = T1.ID
)
WHERE EXISTS
(
SELECT T2.CHAMPS_1, T2.CHAMPS_2
FROM TABLE_2 T2, TABLE_1 T1 
WHERE T2.NUM = T1.ID
AND T1.DATE_TRT < '16/11/11' AND T1.DATE_TRT > '01/10/11'
)
La clause exists est bien executée en premier puis l'update avec la sous requête de jointure uniquement pour les lignes ramenées par le exists ?

merci d'avance,
ben
__________________
Meet the free software gang
ben.IT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 17h44   #2
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Oui, tout à fait. Par contre, je pense que ta requête n'est pas géniale : il ne faut pas refaire la jointure avec TABLE_1 dans tes sous-requêtes.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
UPDATE TABLE_1 T1
SET (CHAMPS_1,CHAMPS_2)
(
SELECT CHAMPS_1, CHAMPS_2
FROM TABLE_2 T2 
WHERE T2.NUM = T1.ID
)
WHERE EXISTS
(
SELECT T2.CHAMPS_1, T2.CHAMPS_2
FROM TABLE_2 T2
WHERE T2.NUM = T1.ID
AND T1.DATE_TRT < '16/11/11' AND T1.DATE_TRT > '01/10/11'
)
(J'ai viré le "TABLE_1 T1" de ta requêtes EXISTS)

Au passage, si tu es en Oracle 10g ou plus, tu peux utiliser MERGE.
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 17/11/2011, 18h17   #3
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 392
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 392
Points : 439
Points : 439
Ok, merci de ta réponse.
juste pour être bien sur :
si la partie avec le where exists renvoie 100 lignes :
Code :
1
2
3
4
5
6
7
WHERE EXISTS
(
SELECT T2.CHAMPS_1, T2.CHAMPS_2
FROM TABLE_2 T2
WHERE T2.NUM = T1.ID
AND T1.DATE_TRT < '16/11/11' AND T1.DATE_TRT > '01/10/11'
)
la partie update ne fera la jointure pour l'update qu'uniquement pour ces 100 lignes ?

Code :
1
2
3
4
5
6
UPDATE TABLE_1 T1
SET (CHAMPS_1,CHAMPS_2)
(
SELECT CHAMPS_1, CHAMPS_2
FROM TABLE_2 T2 
WHERE T2.NUM = T1.ID

ben
__________________
Meet the free software gang
ben.IT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 18h38   #4
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Tout à fait

(N'oublie pas le "=" après le SET )
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/11/2011, 09h12   #5
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 392
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 392
Points : 439
Points : 439
merci.
@ +,
ben
__________________
Meet the free software gang
ben.IT 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 13h47.


 
 
 
 
Partenaires

Hébergement Web