Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在表中添加新列,其值取决于同一表中另一列的值_Mysql_Sql - Fatal编程技术网

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

Mysql 在表中添加新列,其值取决于同一表中另一列的值,mysql,sql,Mysql,Sql,我是Mysql的新手。我想在表中添加一列,其值取决于同一表中的另一列值。例如,我的公司_表如下: fldId | companyName | date -------------------------------- 1 | adeco | 2012-01-12 2 | mic | 2001-03-09 3 | manpower | Null 4 | linar | Null 5 | dlank

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

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

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

ALTER TABLE mytableName ADD fldState INT;
语句成功执行后,现在可以更新所有记录

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

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

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);

是否确实要执行此操作-添加新列?通过引入一个只依赖于日期的列,您违反了第三个标准形式3NF

你可以在网上了解更多。基本上,所有列都应该依赖于表的行列式(PK)

<> P>所以,你可以考虑做的只是在选择SELE:

时创建该列。
SELECT .. fldState = (process date)
FROM ...
这会更好,除非你计划加入该专栏,在这种情况下,速度超过3NF:)