如何通过比较两个表中的两列来更新表中的列

Posted

技术标签:

【中文标题】如何通过比较两个表中的两列来更新表中的列【英文标题】:how to update a column in a table by comparing two columns from two tables 【发布时间】:2016-12-21 14:04:10 【问题描述】:

我有两个表 f1 和 s1。我必须比较两个表的波段列,如果它相同,那么我必须更新 s1 的状态列中的“没有变化”,如果它不一样,那么“等级变化”。

mysql> 从 f1 中选择 *; +--------+------+------+-------------+ | emp_id |姓名 |乐队 | project_des | +--------+------+------+-------------+ | 1 |一个 | u1 |资讯科技 | | 2 |乙| u2 |比较 | | 4 | D | u3 |比较 | | 5 | E | u2 |电气 | | 6 | F | u2 |资讯科技 | | 8 | H | p1 |机械 | +--------+------+------+-------------+ 6 行一组(0.00 秒) mysql> 从 s1 中选择 *; +--------+------+------+-------------+------------ --+--------+ | emp_id |姓名 |乐队 | project_des |检查状态 |状态 | +--------+------+------+-------------+------------ --+--------+ | 1 |一个 | u1 |资讯科技 |礼物 |空 | | 2 |乙| u1 |比较 |礼物 |空 | | 3 | C | p2 |比较 |空 |空 | | 4 | D | p2 |电气 |礼物 |空 | | 5 | E | p3 |资讯科技 |礼物 |空 | | 7 |克| p3 |资讯科技 |空 |空 | | 8 | H | p1 |比较 |礼物 |空 | +--------+------+------+-------------+------------ --+--------+ 一组 7 行(0.00 秒) mysql> update s1 inner join f1 on 's1.band' != 'f1.band' set status='grade change'; 查询正常,4 行受影响(0.06 秒) 匹配行:7 更改:4 警告:0 mysql> 从 s1 中选择 *; +--------+------+------+-------------+------------ --+--------------+ | emp_id |姓名 |乐队 | project_des |检查状态 |状态 | +--------+------+------+-------------+------------ --+--------------+ | 1 |一个 | u1 |资讯科技 |礼物 |年级变化| | 2 |乙| u1 |比较 |礼物 |年级变化| | 3 | C | p2 |比较 |空 |年级变化| | 4 | D | p2 |电气 |礼物 |年级变化| | 5 | E | p3 |资讯科技 |礼物 |年级变化| | 7 |克| p3 |资讯科技 |空 |年级变化| | 8 | H | p1 |比较 |礼物 |年级变化| +--------+------+------+-------------+------------ --+--------------+ 一组 7 行(0.00 秒)

请帮我找出我做错了什么。

【问题讨论】:

为什么是 sql-server 标签? 【参考方案1】:

在 SQL Server 上,试试这个:

update s1 set
    status = case when f1.band = s1.band
        then 'no change' else 'grade change' end
from s1 join f1 on f1.emp_id = s1.emp_id

或者,在 mySQL 上,如果该语法不起作用:

update s1 set status = 
    (Select case when band = s1.band
     then 'no change' else 'grade change' end
     From f1 where emp_id = s1.emp_id)

【讨论】:

我试过了,但输出仍然错误。有很多记录的乐队是相同的,但它的地图等级仍在变化【参考方案2】:
UPDATE table1, table2 SET table1.Column = table2.Column 
WHERE table1.Column  = table2.Column 

【讨论】:

如果您使用与原始问题相同的表名和列名,您的答案会更清楚。理想情况下,您还应该解释为什么您的代码可以解决原始问题。

以上是关于如何通过比较两个表中的两列来更新表中的列的主要内容,如果未能解决你的问题,请参考以下文章

Mysql比较两个表中的两列

将两个表中的列相加到具有两列的第三个表中

在对另一个表进行更新后,如何更新表中的列?

想比较laravel中不同表的两列

oracle两表中的两列进行模糊匹配的方法

SQL UPDATE - 如何使用另一个表更新一个表中的列?