Fusionner 3 tables en 1

Fusionner 3 tables en 1 - SQL/NoSQL - Programmation

Marsh Posté le 21-09-2006 à 15:02:59    

Bonjour,
 
Je suis sous Mysql 5.0, et j'ai 3 tables liées par un ID.
 
Pour shématiser :
 
T1 :  
id
nom
prenom
 
T2:
id
age
sexe
 
T3:
id
cheveux
taille
 
et je voudrai :  
 
T1:
id
nom
prenom
age
sexe
cheveux
taille
J'ai décidé de les fusionner pour n'en avoir plus qu'une.
 
Quelle commande utiliser ?
 
Merci

Reply

Marsh Posté le 21-09-2006 à 15:02:59   

Reply

Marsh Posté le 21-09-2006 à 15:19:50    

create vue v_t1 as
select t1.id, t1.nom, t1.prenom, t2.age, t2.sexe, t3.cheveux, t3.taille
from t1 inner join t2 on t2.id = t1.id inner join t3 on t3.id = t1.id;
 
ensuite tu utilises cette vue comme une table (je suppose que MySQL support les insert/delete/update sur les vues maintenant)
 
et si vraiment ça te choques, tu fais :
mais t'as plus qu'à refaire tes indexs et tout, alors que si tu gardes la vue tu t'emmerdes pas à tout refaire :spamafote:
 
create table t1
as
select * from v_t1;
 
il te reste aussi la solution de fair
 
alter table t1 add column sexe char(1) null;
 
et ainsi de suite pour chaque pour chaque colonne, et mettre à jour les nouvelles colonnes en fonction des autres tables.
 
bon, après tout ça, moi je commence à sècher, j'ai plus d'autre solution à proposer :D


Message édité par MagicBuzz le 21-09-2006 à 15:21:56
Reply

Marsh Posté le 21-09-2006 à 15:32:34    

YEP
merci des conseils
 
Si je rajoute les champs moi-même.
 
QUelle est le code du UPDATE a faire pouer remplir les donnees des champs crées ?

Reply

Marsh Posté le 21-09-2006 à 15:45:21    

un truc du genre (y'a pas deux sgbd qui supportent la même syntaxe, quand ils la supportent)
 
update t1
set
age = t2.age,
sexe = t2.sexe,
cheveux = t3.cheveux,
taille = t3.taille
from t2, t3
where t2.id = id
and t3.id = id
 
ou
 
update t1
set
age = (select age from t2 where id = t1.id),
sexe = (select age from t2 where id = t1.id),
cheveux = (select age from t3 where id = t1.id),
taille = (select age from t3 where id = t1.id)
 
il y a d'autres syntaxe... peut-être aucune
 
le plus propre de toute façon, c'est de faire le "create table as select ...". lui il marche sur tous les sgbd

Reply

Marsh Posté le 21-09-2006 à 15:45:59    

ou de faire un create table avec la liste de tes champs, index et tout
 
puis un  
 
insert into t4 values (select ...)

Reply

Marsh Posté le 21-09-2006 à 16:22:41    

j'ai fais la commande UPDATE (1ere)
 
mais il me dit : #1109 - Table inconnue 't2' dans where clause

Reply

Marsh Posté le 21-09-2006 à 16:44:27    

MagicBuzz a écrit :

ou de faire un create table avec la liste de tes champs, index et tout
 
puis un  
 
insert into t4 values (select ...)


 
grrrrr ca ne marche pas...
 
J'ai crée ma table T4 avec touts les champs de T1, T2 et T3, masi apres je bloque.
 
Tu mets quoi dans le select ?

Reply

Marsh Posté le 21-09-2006 à 16:54:49    

le select de la vue (le premier que je t'ai montré)

Reply

Marsh Posté le 21-09-2006 à 17:07:08    

merci bcp
 
C ok !

Reply

Marsh Posté le 10-07-2007 à 20:44:52    

MagicBuzz a écrit :

un truc du genre (y'a pas deux sgbd qui supportent la même syntaxe, quand ils la supportent)
 
update t1
set
age = t2.age,
sexe = t2.sexe,
cheveux = t3.cheveux,
taille = t3.taille
from t2, t3
where t2.id = id
and t3.id = id
 
ou
 
update t1
set
age = (select age from t2 where id = t1.id),
sexe = (select age from t2 where id = t1.id),
cheveux = (select age from t3 where id = t1.id),
taille = (select age from t3 where id = t1.id)
 
il y a d'autres syntaxe... peut-être aucune
 
le plus propre de toute façon, c'est de faire le "create table as select ...". lui il marche sur tous les sgbd


 
Vais espérer que ça m'aide pour demain au taf en tout cas.


---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed