在表中添加新列,其值取决于同一表中另一列的值

时间:2013-01-24 12:01:42

标签: mysql sql

我是Mysql的新手。我想在表中添加一个列,其值取决于同一个表中的另一个列值。例如,我有如下的company_table:

fldId | companyName | date
--------------------------------
  1   | adeco       | 2012-01-12    
  2   | mic         | 2001-03-09
  3   | manpower    | Null
  4   | linar       | Null
  5   | dlank       | 1999-02-28

我想添加' fldState'此表格中的列取决于' date'柱。例如,如果' date'的值列不是空,然后是'fldState'的值应为1,如果它为空,那么“fldState”的值为'应该是2.如下所示

  fldId | companyName | date        | fldState
  --------------------------------------------
  1     | adeco       | 2012-01-12  | 1
  2     | mic         | 2001-03-09  | 1 
  3     | manpower    | Null        | 2
  4     | linar       | Null        | 2
  5     | dlank       | 1999-02-28  | 1

3 个答案:

答案 0 :(得分:14)

在现有表格中,您需要创建ALTER语句,以便添加新列。

ALTER TABLE mytableName ADD fldState INT;

成功执行语句后,您现在可以更新所有记录,

UPDATE  myTableName
SET     fldState = IF(date IS NULL, 2, 1)

答案 1 :(得分:7)

要添加新的新列,您可以使用以下命令

ALTER TABLE company_table ADD fldState;

如果您想在希望的地方添加这些列。如果您想在companyName之后添加fldState,那么请使用如下所示

ALTER TABLE company_table ADD fldState AFTER companyName;

如果要将Column添加为First Column,请使用aslike follow

ALTER TABLE company_table ADD fldState FIRST;

如果你不再使用任何东西,那么作为默认值,它将被放置在最后。

现在使用以下命令复制列数据。

 UPDATE company_table SET fldState = IF(date IS NULL, 2, 1);

答案 2 :(得分:2)

您确定这是您想要做的 - 添加新列吗?您通过引入仅取决于日期的列来违反第3范式3NF。

您可以在wikipedia上详细了解相关信息。基本上所有列都应该依赖于表的行列式(PK)。

所以你可以考虑做的只是在你选择时创建那个列:

SELECT .. fldState = (process date)
FROM ...

除非你计划加入那个专栏,否则会更好,在这种情况下,速度超过3NF:)