使用SQL更新数据库中的数据

时间:2014-11-27 06:41:55

标签: mysql sql

我的数据库中有一个表。表格的字段如下所述。

ID | NAME | QUALIFICATION 
 1 | ABC  | Phd
 2 | XYZ  | MBA
 3 | ADS  | MBA

现在我的问题与更新QUALIFICATION记录有关。假设我更新了QUALIFICATION的记录,它应该将新值附加到现有值。

例如,我将更新id = 1的记录。现在我更新"资格" MCA然后它应该将MCA添加到现有记录Phd,用逗号分隔。输出将如下所示。

ID | NAME | QUALIFICATION 
 1 | ABC  | Phd,MCA
 2 | XYZ  | MBA
 3 | ADS  | MBA

何时"资格"如果为null,则更新不应在MCA之前添加逗号。

4 个答案:

答案 0 :(得分:1)

多数数据库设计错误从不将数据存储为逗号分隔字符串,这将使未来的事情变得混乱。

您应该考虑将表格标准化,就像您的表格应该是student

一样
- id primary key auto_incremented
- name 
- other columns related to student

然后另一个表格为student_qualification

- id primary key auto_incremented
- id_student ( id from student table)
- qualification

因此,对于每个学生,您可以为此表添加尽可能多的资格,并且可以轻松添加/编辑/删除数据

稍后您可以使用简单的连接表轻松检索数据。

答案 1 :(得分:0)

愿你可以试试这个

 update employee set qualification = qualification || ',MCA' where id = 1

以上内容适用于oracle

修改

然后你可以用它包含case语句

   update employee set qualification = case when qualification is null then
                                     'MCA' else qualification || ',MCA' end where id = 1

答案 2 :(得分:0)

  

首先,您必须选择Qualification列的现有值   你想要更新

     

使用

select qualification from  tb_name where id = 1
  

使用上述查询,您将获得您的资格栏值

     

假设在

$qulification

  

现在使用

更新该行
update set tb_name set qualification = '".$qualification."."your new value" where id = 1

答案 3 :(得分:0)

您可以在SET子句中测试NULL,并使用连接来适当地格式化字符串。

update student
set qualification = concat(if (qualification is not null
                               , concat( qualification, ',')
                               , '' )
                           , 'MBA')
where id = 1;

这是一个working SQL Fiddle(它还演示了具有NULL限定的行为)。


我同意@Abhik对于此特定数据这是一个糟糕的设计,并且规范化是您提供的用例的更好方法但是,还有其他用例在做这种更新是完全有效的,所以问题值得一个正确的答案..