我想在我的表中生成一个新列,如果某一行存在某些条件,则为true。
name | col1 | col2 | flag
--------------------------
a 1 2 0
a 2 3 0
b 1 2 0
b 4 3 0
假设我想为每个name
标识符设置一个标记为1,如果该行存在name
以及col1=2
和col2 = 3
。所以这会导致:
name | col1 | col2 | flag
--------------------------
a 1 2 1
a 2 3 1
b 1 2 0
b 4 3 0
因为a
存在col1=2
和col2 = 3
的行,但对于b
,此行不存在。
在伪代码中我想要这样的东西:
ALTER TABLE table_name
ADD flag TINYINT(1)
IF ##row with condition col1=value1 and col2=value2 exists#
GROUP BY name
如何生成此列?
答案 0 :(得分:2)
所以你想从db获取这些值?或者你想添加列?这是两个不同的目标。
因此,如果您只需要获得这些值,那么:
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