2016-06-27 13 views
0

テーブルに特定の条件で行が存在する場合にtrueの新しい列を生成します。特定の行が存在する場合、MYSQL列を特定の値に設定するにはどうすればよいですか?

name | col1 | col2 | flag 
-------------------------- 
a  1  2  0 
a  2  3  0 
b  1  2  0 
b  4  3  0 

I行がそのnameどこcol1=2col2 = 3で存在する場合、すべてのname識別子のために1にフラグを設定すると言うことができます。 col1=2a行とcol2 = 3に対する必要性が存在するため

name | col1 | col2 | flag 
-------------------------- 
a  1  2  1 
a  2  3  1 
b  1  2  0 
b  4  3  0 

、しかしbため、そのような行が存在しない:これはもたらすであろう。

ALTER TABLE table_name 
ADD flag TINYINT(1) 
IF ##row with condition col1=value1 and col2=value2 exists# 
GROUP BY name 

がどのように私はこのコラムを生成することができます

:擬似コードで

私はこのような何かをしたいですか?

+1

'ALTER TABLE'は変更しない、テーブルスキーマを変更するためのものですテーブル内のデータ。 'UPDATE'と' iNSERT'は行を修正して追加するためのものです。 – Barmar

答えて

2

だから、あなただけのDBからこれらの値を取得したいですか?または列を追加したいですか?それらは2つの異なる目標です。あなただけのことができます。これらの値を取得する必要がある場合

だから:

http://sqlfiddle.com/#!9/65b4c2/1

SELECT t.*, t2.flag 
FROM table_name t 
LEFT JOIN (
    SELECT name, MAX(IF(col1=2 AND col2=3,1,0)) flag 
    FROM table_name 
    GROUP BY name 
) t2 
ON t.name = t2.name 

をし、あなたが本当に新しい列を追加する必要がある場合、あなたはこの道を行く:

http://sqlfiddle.com/#!9/226fb3/1

ALTER TABLE table_name ADD COLUMN flag TINYINT; 

UPDATE table_name t 
LEFT JOIN (
     SELECT name, MAX(IF(col1=2 AND col2=3,1,0)) flag 
     FROM table_name 
     GROUP BY name 
    ) t2 
ON t.name = t2.name 
SET t.flag=t2.flag 
関連する問題