首页 > 解决方案 > 选择和子选择 UPDATE Mysql 案例学科 x 技术

问题描述

我有以下情况:我的表格“disciplines_units_technicians”包含以下列:

最初有两个单元,然后添加了第三个单元,这导致“UNITS X TECHNICAL”链接出现问题

我需要帮助进行以下更新:

首先我选择表:

从学科_单位_技术人员那里选择学科_id?

我想选择 unit_id = 1、2 和 3 的返回(1、2 和 3 的重复行),并从这个返回中进行 UPDATE 在学科 ID 寄存器中:

更新学科_单位_技术人员 SET unit_id = '0' where unit_id = '2'

地点:

更新学科_单位_技术人员 SET unit_id = '2' where unit_id = '3'

只有在表中有 3 条记录的“discipline_id”id 中,即它们包括 unit = 1、2 和 3,但我不知道在这种情况下如何进行选择和子选择以进行更新,请执行不 CONTEMPLATE 纪律 ID 仅在 unit = 1 和 2 的情况下重复返回,仅当在学科 ID 的返回中有一个 unit = 3 时。

在此处输入图像描述

在此处输入图像描述

示例,只需选择具有单位 1、2 和 3 的返回并进行必要的 pos 更新

标签: mysqlsqlselectsql-updateinner-join

解决方案


我认为这可以满足您的要求:

update disciplines_units_technicians dut
inner join (
    select discipline_id
    from disciplines_units_technicians
    where unit_id in (1, 2, 3)
    group by discipline_id
    having count(*) = 3
) dut1 on dut1.discipline_id = dut.discipline_id
set dut.unit_id = case when dut.unit_id = 2 then 0 else 2 end
where dut.unit_id in (2, 3)

基本上,这会过滤表discipline_id中包含所有 3 个unit_ids(1、2 和 3)的 s,并将unit_id2 更新为 0,将 3 更新为 2。


推荐阅读