Mysql 高级SQL从同一个表中选择和更新项
我有一个表,其中包含行Mysql 高级SQL从同一个表中选择和更新项,mysql,Mysql,我有一个表,其中包含行项目id(唯一键)、基本id、步骤id、和活动的行 我需要做的是更新该表中的所有内容,将base\u id其中step\u id=1和active=0匹配到active=1,该表中没有具有相同base\u id和step\u id=2和active=1的条目 ---------------------------------------- | item_id | base_id | step_id | active | | 1 | 1 | 1
项目id
(唯一键)、基本id
、步骤id
、和活动的行
我需要做的是更新该表中的所有内容,将base\u id
其中step\u id
=1和active
=0匹配到active
=1,该表中没有具有相同base\u id
和step\u 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更新为活动的
=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\u id
对记录进行分组,只取那些至少有一个step\u id=1且处于活动状态的记录,以及零个step\u id=2且处于活动状态的记录
sum()
计算内部条件为真的次数
内部选择功能是什么?
它按base\u id
对记录进行分组,只取那些至少有一个step\u id=1且处于活动状态的记录,以及零个step\u id=2且处于活动状态的记录
sum()
select t.*
from table t
where step_id = 1 and active = 0 and
not exists (select 1
from table t2
where t2.base_id = t.base_id and t2.step_id = 2 and t2.active = 1
);
这似乎是对您描述的直接翻译。我将在
或
存在中使用一个简单的:
select t.*
from table t
where step_id = 1 and active = 0 and
not exists (select 1
from table t2
where t2.base_id = t.base_id and t2.step_id = 2 and t2.active = 1
);
这看起来像是对您描述的直接翻译。要更新表,以便将匹配值的活动设置为1
,我们可以将其转换为update语句
由于MySQL在更新子查询中引用的表时遇到一些问题,因此我们插入了额外的嵌套级别,强制创建临时结果并允许更新:
update table1 t
set t.active = 1
where base_id in (
select base_id from (
select base_id
from table1
group by base_id
having sum(step_id = 1 and active = 0) > 0
and sum(step_id = 2 and active = 1) = 0
) a
);
这将为项目id
3、4和5设置active=1
要更新表格,以便将匹配值设置为1
,我们可以将其转换为update语句
由于MySQL在更新子查询中引用的表时遇到一些问题,因此我们插入了额外的嵌套级别,强制创建临时结果并允许更新:
update table1 t
set t.active = 1
where base_id in (
select base_id from (
select base_id
from table1
group by base_id
having sum(step_id = 1 and active = 0) > 0
and sum(step_id = 2 and active = 1) = 0
) a
);
这将为项目id
3、4和5设置active=1
我编辑了第一篇文章,让你知道预期的结果是什么。这不就是你想要的结果吗?我以前从未使用过sum,你能详细说明这将如何实现吗?我编辑了第一篇文章,让你知道预期的结果会是什么。这不会给你带来预期的结果吗?我以前从未使用过sum,你能详细说明这将如何实现吗?