如果按分组方式填充了至少一个,则更新列

时间:2019-02-22 10:14:51

标签: mysql

我正在尝试更新 col_a ,以使其中至少一个用“ > app ”分组,按 col_b

我很难思考该怎么做。

当前情况: 表A

+----+--------------+------+
|id  | col_a        | col_b|
+----+--------------+------+
| 1  | App          | 1111 |
+----+--------------+------+
| 2  | NULL         | 1111 |
+----+--------------+------+
| 3  | NULL         | 1111 |
+----+--------------+------+
| 4  | App          | 1111 |
+----+--------------+------+
| 5  | Tus          | 2222 |
+----+--------------+------+
| 6  | NULL         | 2222 |
+----+--------------+------+
| 7  | Hoe          | 2222 |
+----+--------------+------+
| 8  | NULL         | 2222 |
+----+--------------+------+
| 9  | App          | 3333 |
+----+--------------+------+
| 10 | NULL         | 3333 |
+----+--------------+------+
| 11 | App          | 3333 |
+----+--------------+------+
| 12 | NULL         | 3333 |
+----+--------------+------+

所需结果: 表A

+----+--------------+------+
|id  | col_a        | col_b|
+----+--------------+------+
| 1  | App          | 1111 |
+----+--------------+------+
| 2  | App          | 1111 |
+----+--------------+------+
| 3  | App          | 1111 |
+----+--------------+------+
| 4  | App          | 1111 |
+----+--------------+------+
| 5  | Tus          | 2222 |
+----+--------------+------+
| 6  | NULL         | 2222 |
+----+--------------+------+
| 7  | Hoe          | 2222 |
+----+--------------+------+
| 8  | NULL         | 2222 |
+----+--------------+------+
| 9  | App          | 3333 |
+----+--------------+------+
| 10 | App          | 3333 |
+----+--------------+------+
| 11 | App          | 3333 |
+----+--------------+------+
| 12 | App          | 3333 |
+----+--------------+------+

1 个答案:

答案 0 :(得分:1)

Infinity

过滤所有update your_table_name set col_a = 'App' where col_b IN (select col_b from your_table_name where col_a = 'App') 值,并仅更新过滤后的值中包含col_b值的那些值。

您可以使用col_b通过这种方式进一步优化它:

is null

#UPDATE:

  • 上面的查询引发了一个错误,该错误在 MySQL 中两次被提及。

方法1:

为避免此问题,我们可以创建表名的别名并对其进行调整,如下所示:

update your_table_name
set col_a = 'App'
where col_a IS NULL and col_b IN (select col_b from your_table_name where col_a = 'App')

方法2:

我们可以使用自身对表进行内部联接,并对其中具有update your_table_name set col_a = 'App' where col_a IS NULL and col_b IN (select col_b from (select * from your_table_name) t2 where col_a = 'App') 的{​​{1}}值进行分组,然后相应地更新行。这将提高性能。

col_b