14

我是 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”列。例如,如果“日期”列的值不是 Null,则“fldState”的值应为 1,如果为 Null,则“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
4

3 回答 3

18

从现有表中,您需要创建一个ALTER语句,以便您可以添加新列。

ALTER TABLE mytableName ADD fldState INT;

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

UPDATE  myTableName
SET     fldState = IF(date IS NULL, 2, 1)
于 2013-01-24T12:04:23.830 回答
7

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

ALTER TABLE company_table ADD fldState;

如果您想在您希望的地方添加这些列。就像你想在 companyName 之后添加 fldState 一样,然后像下面这样使用

ALTER TABLE company_table ADD fldState AFTER companyName;

如果你想添加列作为第一列,然后使用如下

ALTER TABLE company_table ADD fldState FIRST;

如果你不再使用任何东西,那么默认情况下它会放在最后。

现在像下面的命令一样使用复制列数据。

 UPDATE company_table SET fldState = IF(date IS NULL, 2, 1);
于 2013-01-24T12:21:23.773 回答
3

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

您可以在wikipedia上阅读有关它的更多信息。基本上,您的所有列都应取决于表的行列式(PK)。

因此,您可以考虑做的是仅在您进行选择时创建该列:

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

这会更好,除非您打算经常加入该专栏,在这种情况下速度超过 3NF :)

于 2013-01-24T12:26:39.393 回答