2015-12-28 5 views
1

У меня есть структура данных, как показано нижеКак обновить несколько столбцов в этом случае

CREATE TABLE IF NOT EXISTS `admin_tax_names` (
    `sl_no` int(11) NOT NULL auto_increment, 
    `tax_id` varchar(3) default NULL, 
    `tax_name` varchar(50) default NULL, 
    `modified_at` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    PRIMARY KEY (`sl_no`) 
) ; 


INSERT INTO `admin_tax_names` (`sl_no`, `tax_id`, `tax_name`, `modified_at`) VALUES 
    (1, 'T1', 'cost', '2015-01-22 16:55:19'), 
    (2, 'T6', 'Service Tax', '2015-01-22 16:55:19'), 
    (3, 'T3', 'VAT', '2015-01-22 16:55:19'), 
    (4, 'T4', 'OtherTax2', '2015-01-22 16:55:19'), 
    (5, 'T5', 'OtherTax1', '2015-01-22 16:55:20'), 
    (6, 'T2', 'Discount', '2015-01-23 19:23:30'), 
    (7, 'T7', 'Service Charge', '2015-02-09 20:48:19'); 

И мне нужно обновить T1, T2, T3, T4, T5, T6, T7 с различными значениями в одном операторе Я попытался, как

UPDATE admin_tax_names SET T1 = 'cost' , T2 = 'as' , T3 = 'sas' , T4 = 'sas' , T5='sas' , T6 = 'asa' , T7 ='asas'; 

Но ошибка я получаю

Неизвестный столбец «T1» в «списке полей

Это мой sqlfiddle

http://sqlfiddle.com/#!9/4c24d

Не могли бы вы сказать мне, как обновить таблицу в этом случае ??

+0

Check ** [демо] (http://sqlfiddle.com/#!9/ec4ae/1/0) ** Это то, что вам нужно? – lad2025

+0

@ lad2025, спасибо большое ... – Pawan

+0

Я только что обновил [Gordon answer] (http://stackoverflow.com/a/34494179/5070879) Примите его и удачи. – lad2025

ответ

0

Я имею в виду, хотите что-то вроде этого:

update admin_tax_names 
    set tax_name = (case tax_id 
         when 'T1' then 'cost' 
         when 'T2' then 'as' 
         when 'T3' then 'sas' 
         when 'T4' then 'sas' 
         when 'T5' then 'sas' 
         when 'T6' then 'asa' 
         when 'T7' then 'asas' 
        end) 
    where tax_id in ('T1', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'); 

Вы, кажется, путает различие между именем столбца и значение столбца.

+0

'tax_id varchar (3) default NULL,' попробуйте обновиться до '' asas'' или ''cost'' – lad2025

+0

@ lad2025. , , Возможно, это намерение - «tax_name». –

+0

Наверное, да, ОП должен уточнить его вопрос. Еще одна вещь 'sl_no' -' INT', и вы, вероятно, хотели 'WHERE tax_id IN ...' – lad2025

0

Здесь вы используете column value вместо имени столбца в операторе обновления

UPDATE Syntax

UPDATE [LOW_PRIORITY] [IGNORE] table_reference 
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
    [WHERE where_condition] 
    [ORDER BY ...] 
    [LIMIT row_count] 

Вот запрос;

UPDATE admin_tax_names 
SET `tax_name` = 
    case 
     when `tax_id` = 'T1' then 'cost' 
     when `tax_id` = 'T2' then 'as' 
     when `tax_id` = 'T3' then 'sas' 
     when `tax_id` = 'T4' then 'sas' 
     when `tax_id` = 'T5' then 'sas' 
     when `tax_id` = 'T6' then 'asa' 
     when `tax_id` = 'T7' then'asas' 
     else `tax_name` 
    end; 

sql fiddle demo

+0

Вы изменили структуру таблицы 'tax_id varchar (3) default NULL,' в вашей демонстрации http://sqlfiddle.com/#!9/5dea3/1 и не оставляете записку в ответе – lad2025

+1

Спасибо, praveen, но я хочу изменить имя tax_name и сохранить tax_id как есть – Pawan

+0

@Preethi Jain Я обновил свой ответ – Praveen

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