2010-07-24 4 views
0

est-ce possible?

update table set number2 = number where number != "" and set number, number2 = $number where number=""; 

ou dois-je faire

update table set number2 = number where number != ""; 
update table set number = $number, number2 = number where number = ""; 

Répondre

1

Je voudrais juste les faire comme deux déclarations « séparer » et ne pas se soucier d'essayer de trouver une solution intelligente (ce qui est rarement intelligent IMNSHO).

Vous verrez que j'ai cité le mot "séparé" ci-dessus puisque tout SGBD décent fournira un support transactionnel qui rendra ces deux instructions en une, en termes d'atomicité (le A dans ACID).

En d'autres termes, quelque chose comme:

start transaction; 
update table set number2 = number where number != ""; 
update table set number = $number, number2 = number where number = ""; 
commit transaction; 

Ce sera presque toujours plus rapide (en supposant number est indexé) qu'une solution intelligente en utilisant des fonctions par ligne comme CASE, IF et ainsi de suite, depuis deux très les passages rapides valent mieux qu'un passage lent :-)

Questions connexes