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 22/11/2010, 15h43   #1
Invité de passage
 
Mia Mous
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Mia Mous

Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
Par défaut Mise à jour d'un champ à partir d'une autre table

Bonjour tout le monde.

Je sollicite votre aide pour la construction d'une requête SQL de mise à jour.
J'ai une table A principale et une table temporaire B que je veux utiliser pour mettre à jour la table A.
Le champ à mettre à jour dans la table A c'est Codex à partir d'un champ de la table B qui s'appelle Codex1.

J'ai créé la requête ci-dessous pour mettre à jour mon champ mais rien ne se passe quand je l'exécute. Quelqu'un pourrait-il m'aider :
Code :
1
2
3
4
5
6
UPDATE site_A s
SET s.codex =(SELECT w.Codex1
FROM B w
WHERE
ress_id = id
);
J'utilise Oracle 10g.
Cordialement.
zeng49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 16h01   #2
Membre régulier
 
Inscription : septembre 2008
Messages : 84
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 84
Points : 88
Points : 88
Bonjour,

Attention, en l état, la requête met a jour toutes les lignes de la table A.

Il faut essayer ceci :
Code :
1
2
3
4
 
UPDATE site_A s
SET s.codex = (SELECT w.Codex1 FROM B w WHERE w.ress_id = s.id)
WHERE s.id IN (SELECT w.ress_id FROM B);
Dans tous les cas, merci
- d expliquer ce que veut dire "il ne se passe rien" (c est une erreur, aucune ligne n est mise a jour, ...)
- de donner des infos sur le modele de données et le contenu des tables avec le resultat attendu
spdev666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 16h21   #3
Invité de passage
 
Mia Mous
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Mia Mous

Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
Quand je dis la requête ne fait rien c'est pour dire qu'aucune ligne n'est mise à jour. Je viens d'essayer avec votre requête mais aucune mise à jour n'est effectué sur ma table et pourtant je n'ai aucun message d'erreur.

Voilà le problème: j'ai créer une table temporaire ke j'appelle B qui contient des informations de mise à jour pour ma table A. A et B ont de commun le champ id_ress et id. L'objectif est d'utiliser les champs id et id_ress pour mettre à jour le champ codex de la table A à partir du champ codex1 de la table B.

Je ne sais pas si vous comprenez bien ce que je veux dire.
En cas merci de me donner des pistes.

Cordialement.
zeng49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 16h35   #4
Membre régulier
 
Inscription : septembre 2008
Messages : 84
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 84
Points : 88
Points : 88
pouvez vous indiquer les données contenues dans des deux tables ?
spdev666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 16h36   #5
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 516
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 516
Points : 3 957
Points : 3 957
Est-ce que vous faites bien un commit quelque part?
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2010, 16h59   #6
Invité de passage
 
Mia Mous
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Mia Mous

Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
Les données indiquées dans les deux champs sont de type Number

en gros j'ai ça

Table A

ID_Ress|Codex
A201Y|21026
BHGF41|325642


Table B

ID|Codex1
A201Y|26542
BHGF41|56268

Je veux donc mettre à jour le champ Codex de la table A par le champ codex1 de la table B.

J'espère que c'est un peu plus claire.
zeng49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 18h31   #7
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
Citation:
Envoyé par zeng49 Voir le message
Les données indiquées dans les deux champs sont de type Number

en gros j'ai ça

Table A

ID_Ress|Codex
A201Y|21026
BHGF41|325642


Table B

ID|Codex1
A201Y|26542
BHGF41|56268

Je veux donc mettre à jour le champ Codex de la table A par le champ codex1 de la table B.

J'espère que c'est un peu plus claire.
"en gros" oui mais en détail ?? là par exemple on voit la table B qui comporte un champ ID_RESS alors que sur la requete vous utilisez une colonne RESS_ID. Il y a donc une erreur de syntaxe.

Donc, soit vous avez donné exactement votre contexte et c'est la syntaxe qui pète, soit vous n'avez pas donné exactement toutes les caractérisitique de vos tables et requêtes et on ne peut pas deviner... ça peut etre par exemple entre autres, un pb d'une jointure entre 2 char de différentes dimensions ou plein d'autres trucs qui se cachent dans les détails...
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2010, 19h21   #8
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
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 680
Points : 10 470
Points : 10 470
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Avez-vous pris en compte la remarque de 7gyY9w1ZY6ySRgPeaefZ ?
Car votre requête avec ce que vous indiquez fonctionne très bien.

Données
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CREATE TABLE TableA
AS
SELECT 'A201Y' AS ID_Ress,  21026 AS Codex FROM dual union ALL
SELECT 'BHGF41'          , 325642          FROM dual;
-- Table created.
 
CREATE TABLE TableB
AS
SELECT 'A201Y' AS ID, 26542 AS Codex1 FROM dual union ALL
SELECT 'BHGF41'     , 56268           FROM dual;
-- Table created.
 
SELECT ID_Ress, Codex
  FROM TableA;
 
ID_RES      CODEX
------ ----------
A201Y       21026
BHGF41     325642
 
-- 2 rows selected.
 
SELECT ID, Codex1
  FROM TableB;
 
ID         CODEX1
------ ----------
A201Y       26542
BHGF41      56268
 
-- 2 rows selected.
Mise à jour
Code :
1
2
3
4
5
6
7
8
UPDATE TableA ta
   SET ta.Codex = (SELECT tb.Codex1
                     FROM TableB tb
                    WHERE tb.ID = ta.ID_Ress);
-- 2 rows updated.
 
commit;
-- Commit complete.
Vérification
Code :
1
2
3
4
5
6
7
8
9
SELECT ID_Ress, Codex
  FROM TableA;
 
ID_RES      CODEX
------ ----------
A201Y       26542
BHGF41      56268
 
-- 2 rows selected.
Ou alors vous avez un problème avec le critère de jointure, rajoutez les alias de table dans votre update à ce niveau-là :
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 09h35   #9
Invité de passage
 
Mia Mous
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Mia Mous

Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
Bonjour tout le monde. Pour répondre à la question de 7gyY9w1ZY6ySRgPeaefZ, j'ai bien mis un commit à la fin pour enregistrer ma mise à jour. Je vais à présent essayer les différentes solutions proposées et je vous dirais ce que ça donne.

Merci
zeng49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 10h10   #10
Invité de passage
 
Mia Mous
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Mia Mous

Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
J'ai finalement réussi à régler le problème. Soit mes contrôles d'hier n'étaient pas bon parce j'étais fatigué soit c'était dû au fait que le champ que je voulais mettre à jour était de type NUMBER et le champ que je voulais utiliser était de type FLOAT. J'ai reconstruit ma table ma table temporaire en mettant mettant le même type et tout fonctionne avec ma requête d'hier. En tout cas merci à tout le monde.
zeng49 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 04h35.


 
 
 
 
Partenaires

Hébergement Web