Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1956 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Update d'une table sur conditions dans une autre table

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Update d'une table sur conditions dans une autre table

n°1861126
bertronic
Posté le 13-03-2009 à 12:02:56  profilanswer
 

Bonjour,
 
Voila le topo, je suis sur sql server et je dois mettre à jour une chiée de lignes en regardant le status dans une autre table.
 
N'y aurait-il pas un moyen de faire une requête qui va chercher la condition dans une autre table ?  
 
Genre : Update telle ligne si telle ligne = x dans table 2
 
Sorry, je suis une quille en SQL :/
 
J'espere que c'est compréhensible :/
 
Merci !


---------------
Syno NAS DS216Play
mood
Publicité
Posté le 13-03-2009 à 12:02:56  profilanswer
 

n°1861159
guybrush02
Posté le 13-03-2009 à 13:10:01  profilanswer
 

Sauf erreur de ma part, tu peux écrire ce que tu proposes :  
UPDATE table1 SET row1 = value1 WHERE ok = IF(condition, ok, nok)

Message cité 1 fois
Message édité par guybrush02 le 13-03-2009 à 13:10:15
n°1861187
bertronic
Posté le 13-03-2009 à 14:05:18  profilanswer
 

guybrush02 a écrit :

Sauf erreur de ma part, tu peux écrire ce que tu proposes :  
UPDATE table1 SET row1 = value1 WHERE ok = IF(condition, ok, nok)


 
Et ou définis-tu l'autre table ?
 
Si par exemple tu as table1 qui contient row1 à updater et table2 qui contient la condition si row2=1 par ex ?
 
 


---------------
Syno NAS DS216Play
n°1861193
guybrush02
Posté le 13-03-2009 à 14:11:00  profilanswer
 

table2.row2  :(
 
[Edit : Au pire, si ton SGBD le permet, tu peux toujours effectuer une sous-requête dans la clause WHERE et tester l'absence, la présence ou la valeur du résultat.]
 
[Edit2 : J'ai relu ton message... je rêve, ou tu as bel et bien dit que la condition était stockée dans la table ? oO]

Message cité 1 fois
Message édité par guybrush02 le 13-03-2009 à 14:12:50
n°1861199
bertronic
Posté le 13-03-2009 à 14:16:09  profilanswer
 

guybrush02 a écrit :

table2.row2  :(
 
[Edit : Au pire, si ton SGBD le permet, tu peux toujours effectuer une sous-requête dans la clause WHERE et tester l'absence, la présence ou la valeur du résultat.]
 
[Edit2 : J'ai relu ton message... je rêve, ou tu as bel et bien dit que la condition était stockée dans la table ? oO]


 
J'ai déja essayé ça .. tu es sur que ça passe en sql server ?
 
Edit : en fait c'est difficile d'expliquer sans donner les valeurs et le reste ...  
 
Voici ce que j'ai en gros :
 
Table1
 
Row1  Var1
 
x1       0  
x2       0  
x3       1
x4       0
x5       1
 
Table2
 
Row1   Var2
 
x1       15  
x2       30
x3       58
x4       20  
x5       21
 
Je voudrais mettre à zéro toutes les valeurs de var2 dont la valeur de var1 est égale à 0 dans la table 1
Donc x3 et x5 devraient se retrouver à 0 dans la table 2.
 
:)


Message édité par bertronic le 13-03-2009 à 14:22:55

---------------
Syno NAS DS216Play
n°1861206
macgawel
Posté le 13-03-2009 à 14:27:09  profilanswer
 

Normalement, il doit y avoir une relation entre les deux tables, sinon ce n'est plus vraiment du ressort du SQL mais de l'applicatif.
Et s'il y a une relation, il "suffit" de faire un

Code :
  1. UPDATE Table1 ...
  2. WHERE (Table1.champ1 = Table2.Champ2) AND (<Ici la condition genre Table2.champ2 = 42> )
 

[Edit]Et faire une seule table Row1 Var1 Var2 ? Parce que là, je ne vois pas trop l'intérêt de 2 tables distinctes !

Message cité 1 fois
Message édité par macgawel le 13-03-2009 à 14:28:53
n°1861207
guybrush02
Posté le 13-03-2009 à 14:28:15  profilanswer
 

UPDATE table2 set var2 = 0 where 0=(SELECT var1 from table1 where table1.row1=table2.row1)
 
macgawel> Pas sûr que ça passe, référencer une relation dans une clause where ne peut normalement pas se faire sans la mentionner dans une quelconque forme de FROM.

Message cité 1 fois
Message édité par guybrush02 le 13-03-2009 à 14:29:27
n°1861210
macgawel
Posté le 13-03-2009 à 14:31:16  profilanswer
 

guybrush02 a écrit :

UPDATE table2 set var2 = 0 where 0=(SELECT var1 from table1 where table1.row1=table2.row1)
 
macgawel> Pas sûr que ça passe, référencer une relation dans une clause where ne peut normalement pas se faire sans la mentionner dans une quelconque forme de FROM.


J'ai testé :

Code :
  1. UPDATE table2, table1 set table2.var2 = 0
  2. WHERE (table1.row1=table2.row1) AND (table1.var1 = 1)

devrait fonctionner...

n°1861228
bertronic
Posté le 13-03-2009 à 14:50:40  profilanswer
 

macgawel a écrit :

Normalement, il doit y avoir une relation entre les deux tables, sinon ce n'est plus vraiment du ressort du SQL mais de l'applicatif.
Et s'il y a une relation, il "suffit" de faire un

Code :
  1. UPDATE Table1 ...
  2. WHERE (Table1.champ1 = Table2.Champ2) AND (<Ici la condition genre Table2.champ2 = 42> )


 
[Edit]Et faire une seule table Row1 Var1 Var2 ? Parce que là, je ne vois pas trop l'intérêt de 2 tables distinctes !


 
Merci ! en fait j'ai vachement simplifié .. il n'y a pas que ces données dans les tables.


---------------
Syno NAS DS216Play

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Update d'une table sur conditions dans une autre table

 

Sujets relatifs
[MySQL 5] Champs pleins après UPDATEindexer une table
Remplir une Table non liee a une databaseRequête SQL complexe et éviter table temporaire
Comment récupérer toute ma table SQL?[JAVA] Séries de "for" imbriqués avec conditions
[SQL] SELECT sur une table avec clé étrangère sur cette même tablecreation de table
[MYSQL 5] Resultat d'une procédure stockée dans une table temporaireAlerte doublons + update
Plus de sujets relatifs à : Update d'une table sur conditions dans une autre table


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR