2012-10-30 2 views
2

У меня есть TBL, например:MYSQL вставить в первую пустую колонку

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

То, что я хочу, чтобы вставить в первую пустую колонку (можно сделать их ничтожными, если это помогает). В данном случае, если я добавлю к u1 значение 2, оно будет вставлено в col2. Если я сделаю это для u2, он войдет в col1. и для u3 он войдет в u3. Эти три запроса будут делать трюк, но я предпочел бы сделать это в одном.

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=''

ответ

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 

Я проигнорировала NULL с для простоты. В основном вы можете использовать CASE для каждого столбца, проверяя первый пустой столбец и устанавливая его значение на его текущее значение, если изменения не требуются.

+0

Можно ли вставить новые значения для строки без указания имени столбца? то есть, не может ли запрос просто увидеть, какой немедленный столбец для этой строки пуст, и заполнить его новым значением? – Dante

Смежные вопросы