2012-10-30 3 views
2

J'ai un TBL, par exemple:MYSQL insérer dans la première colonne vide

uniqueId  | col1 | col2 | col3 
u1     8  
u2 
u3     13   89 

Ce que je veux est d'insérer dans la première colonne vide (peut les rendre nulle si cela aide). Dans le donné si je vais ajouter à u1 la valeur 2, il sera inséré dans col2. Si je le fais pour u2, il entrera col1. et pour u3 il entrera en u3. Ces trois requêtes feront l'affaire mais je préférerais le faire en un.

INSERT INTO tbl SET col1 = $toInsertVal WHERE uniqueId=u col1=''
INSERT INTO tbl SET col2 = $toInsertVal WHERE uniqueId=u col1<>'' AND col2=''
INSERT INTO tbl SET col3 = $toInsertVal WHERE uniqueId=u col1<>'' AND col2<>'' AND col3=''

Répondre

1
insert into tbl set 
col1 = case when col1 = '' then $toInsertVal else col1 end 
, col2 = case when col2 = '' and col1 <> '' then $toInsertVal else col2 end 
... 
where uniqueid = u 

Je l'ai ignoré NULL s par souci de simplicité. Fondamentalement, vous pouvez utiliser un CASE sur chaque colonne, en vérifiant sur la première colonne vide et en définissant sa valeur à sa valeur actuelle si aucune modification n'est nécessaire.

+0

Est-il possible d'insérer les nouvelles valeurs pour une ligne, sans spécifier le nom de la colonne? c'est-à-dire, la requête ne peut-elle pas simplement voir quelle colonne immédiate pour cette ligne est vide et la remplir avec la nouvelle valeur? – Dante

Questions connexes