Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 08/09/2011, 23h02   #1
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
Par défaut Comment faire ma jointure insert ?

Bonsoir, je souhaite mettre à jour 2 champs dans 2 tables
voici ce que j'ai essayé

Code :
1
2
3
4
5
6
7
8
UPDATE 
A.adresses, P.personnes
SET 
A.nom_rue="larue",P.prenom="leprelnom" 
ON
A.id_personne = P.id_personne 
WHERE 
A.id_adresse=2
Code :
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON A.id_personne = P.id_personne WHERE A.id_adresse=2' at line 5
c'est ma première tentative d'une mise à jour avec un jointure ,

Comment dois-je modifier ma requête pour qu'elle fonctionne

je vous remercie d'avance pour la réponse.
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 23h16   #2
Membre chevronné
 
Avatar de Oishiiii
 
Administrateur de base de données
Inscription : août 2009
Messages : 404
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : août 2009
Messages : 404
Points : 643
Points : 643
Bonsoir,

Une chaînes de caractère s'encadre d'apostrophes et non de guillemets.

J'ai un doute sur les préfixes A et P dans la clause UPDATE; ils ne sont pas définit.

Je ne crois pas qu'on puisse utiliser le mot ON dans l'UPDATE.

Essayez ceci :
Code :
1
2
3
4
5
UPDATE adresses AS A, personnes AS P
SET A.nom_rue = 'larue'
  , P.prenom = 'leprelnom'
WHERE A.id_personne = P.id_personne
  AND A.id_adresse = 2
Essayez de créer vos sujets dans le forum de votre SGBD (MySQL).
Oishiiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 23h27   #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 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Je crois que la syntaxe multi-tables est en fait utilisée pour faire une jointure à la mode ancienne. UPDATE n'opère que sur une seule table si je ne m'abuse, comme disait le docteur !

Code :
1
2
3
4
5
6
7
8
-- Exemple figurant dans la doc MySQL
UPDATE items,month 
SET items.price=month.price
WHERE items.id=month.id;
-- Equivalent avec jointure normalisée
UPDATE items i
INNER JOIN month m ON m.id = i.id
SET i.price = m.price
=> Seule la table items est mise à jour
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 23h32   #4
Membre chevronné
 
Avatar de Oishiiii
 
Administrateur de base de données
Inscription : août 2009
Messages : 404
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : août 2009
Messages : 404
Points : 643
Points : 643
Aussi surprenant que cela puisse paraître CinePhil, il me semble justement que MySQL peut mettre à jour les deux tables, avec une seule requête.

Je vais tester, je reviens.

Ça passe :
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
 
-- select @@version;
-- 5.1.44
 
CREATE TABLE t1 (
 t1_id integer
,t1_valeur char(3) );
 
CREATE TABLE t2 (
 t2_id integer
,t2_valeur char(3) );
 
INSERT INTO t1 VALUES (1, 'abc'), (2, 'def');
INSERT INTO t2 VALUES (5, 'jkl'), (1, 'ghi');
 
UPDATE t1, t2
SET t1_valeur = 'xyz'
, t2_id = 99
WHERE t1_id = t2_id;
 
SELECT t1_id, t1_valeur, 't1' AS tableName
FROM t1
union
SELECT t2_id, t2_valeur, 't2' AS tableName
FROM t2;
Oishiiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 10h58   #5
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
merci de ces réponse

j'ai essayé ceci
Code :
1
2
3
4
5
6
7
8
9
 
UPDATE 
adresses, personnes
SET 
adresses_nom_rue='larue',personnes_prenom='leprelnom' 
WHERE
adresses_id_personne = personnes_id_personne 
 
#1054 - Unknown column 'adresses_nom_rue' in 'field list'
il faut encore ajouter un autre where pour modifier l'id_personne = 2 ?

ça m'a l'aire d'être chaud , car là je n'ai mis que 2 tables mai en réalité il y a beaucoup plus
peut être qu'il faut je fasse plusieurs update pour chaque table ? ça sera plus simple pour moi?
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 12h25   #6
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
j'ai réussi a le faire avec ceci
Code :
1
2
3
4
5
6
7
 
UPDATE 
adresses, personnes
SET 
adresses.nom_rue='larue',personnes.prenom='leprelnom' 
WHERE
adresses.id_personne = personnes.id_personne AND personnes.id_personne = 2
keokaz 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 20h10.


 
 
 
 
Partenaires

Hébergement Web