我有一个表,其中包含行 item_id
(唯一键)、base_id
、step_id
和 active
.
我需要做的是更新该表中的所有内容,匹配 base_id
其中 step_id
= 1 和 active
= 0 到 active
= 1 在同一个表中没有具有相同 base_id
和 step_id
的条目 = 2 和 active
= 1.
----------------------------------------
| item_id | base_id | step_id | active |
| 1 | 1 | 1 | 0 |
| 2 | 1 | 2 | 1 |
| 3 | 2 | 1 | 0 |
| 4 | 3 | 1 | 0 |
| 5 | 3 | 1 | 0 |
----------------------------------------
这将返回使项目 3、4 和 5 更新为具有 active
= 1
如果这是有道理的。任何帮助是极大的赞赏。提前致谢。
最佳答案
select item_id
from your_table
where base_id in
(
select base_id
from your_table
group by base_id
having sum(step_id = 1 and active = 0) > 0
and sum(step_id = 2 and active = 1) = 0
)
内部选择是做什么的?
它按 base_id
对记录进行分组,并且只接受至少有 1 条 step_id = 1 和 active
的记录,以及零条 step_id = 2 和 active = 1< 的记录
.
sum()
计算内部条件为真的次数。
关于mysql - 高级 SQL 从同一个表中选择和更新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32279368/