如果存在某一行,如何将MYSQL列设置为某个值?

时间:2016-06-27 15:23:46

标签: mysql

我想在我的表中生成一个新列,如果某一行存在某些条件,则为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=2col2 = 3。所以这会导致:

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

因为a存在col1=2col2 = 3的行,但对于b,此行不存在。

在伪代码中我想要这样的东西:

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

如何生成此列?

1 个答案:

答案 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