2013-01-24 19 views
12

私はMysqlで新しいです。私は以下のようにcompany_table持っている例.FOR同じテーブル内の別の列の値を依存する値でテーブルの列を追加したい:同じテーブル内の別の列の値に応じてテーブルに新しい列を追加します

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」列を追加したいです「日付」列に表示されます。例えば「日付」列の値が「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 

答えて

13

である必要があり、その後nullでない場合新しい列を追加できるようにALTERステートメントを作成する必要があります。

ALTER TABLE mytableName ADD fldState INT; 

ステートメントが正常に実行された後、あなたは今、あなたが以下のコマンドを使用することができ、新たな新しい列を追加するには、すべてのレコード、

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

を更新することができます

ALTER TABLE company_table ADD fldState; 

あなたの希望する場所にそれらの列を追加したい場合。好きなようにあなたがにcompanyName後fldStateを追加したい場合は、次にあなたが最初の列としての列を追加したい場合は、使用しない場合は、次に

ALTER TABLE company_table ADD fldState FIRST; 

を次aslike使用

ALTER TABLE company_table ADD fldState AFTER companyName; 

を次のようなとして使用しますどんなものでも、次にデフォルトでは最後に置かれます。

次のコマンドを使用して、列データをコピーします。

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

これはあなたがしたいことですか?新しい列を追加してもよろしいですか?あなたは、日付にのみ依存する列を導入して、3番目の正規形、3NFに違反しています。

wikipediaについて詳しく読むことができます。基本的には、すべての列はテーブルの行列式(PK)に依存する必要があります。

だから、あなたが選択を行うときにのみ、その列を作成して行うことを検討することができるもの:

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

あなたはケース速度が3NFを打つているその列に多く、上で参加する予定がない限り、これは良いだろう:)

関連する問題