Update d'une table sur conditions dans une autre table

Update d'une table sur conditions dans une autre table - SQL/NoSQL - Programmation

Marsh Posté le 13-03-2009 à 12:02:56    

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
Reply

Marsh Posté le 13-03-2009 à 12:02:56   

Reply

Marsh Posté le 13-03-2009 à 13:10:01    

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
Reply

Marsh Posté le 13-03-2009 à 14:05:18    

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
Reply

Marsh Posté le 13-03-2009 à 14:11:00    

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
Reply

Marsh Posté le 13-03-2009 à 14:16:09    

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
Reply

Marsh Posté le 13-03-2009 à 14:27:09    

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
Reply

Marsh Posté le 13-03-2009 à 14:28:15    

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
Reply

Marsh Posté le 13-03-2009 à 14:31:16    

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...

Reply

Marsh Posté le 13-03-2009 à 14:50:40    

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
Reply

Sujets relatifs:

Leave a Replay

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