我正在尝试更新 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 |
+----+--------------+------+
答案 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:
方法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