mysql - 高级 SQL 从同一个表中选择和更新项目

标签 mysql

我有一个表,其中包含行 item_id(唯一键)、base_idstep_idactive.

我需要做的是更新该表中的所有内容,匹配 base_id 其中 step_id = 1 和 active = 0 到 active = 1 在同一个表中没有具有相同 base_idstep_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/

相关文章:

mysql - MySQL 中的反向测试版

mysql - 奇怪的 "all"在“哪里”

mysql - MySQL 临时表应该建立索引(或者有主键)吗?

MySQL Select 列搞砸了

mysql - 更改 MySQL 中的字符编码?

mysql - 集合映射的 where 子句

php - MySQL如何在使用除法时保留精度?

php - 保存 CSV 文件而不是下载

c# - 备份和恢复mysql数据库c#

php - 如何在 INSERT 查询中使用 JOIN?