根据mysql中其他表中的匹配值更新列

Posted

技术标签:

【中文标题】根据mysql中其他表中的匹配值更新列【英文标题】:Update column based on matching values in other table in mysql 【发布时间】:2012-09-20 23:05:40 【问题描述】:

我有两个表日历和客户表。日历表有一个“客户”列,其中客户表“ID”作为值。但不幸的是,这个日历客户字段值被错误地填充了其他值。两个表都有这些公共字段 Date、SeatingID 和 BusID。如何根据这些常用字段更新日历表客户字段?

下面是两个表的结构。

客户表

日历表

【问题讨论】:

【参考方案1】:

你可以UPDATE第二个表CalendarCustomer字段从第一个表Customer通过JOINing这两个表像这样:

UPDATE calendar c1
INNER JOIN Customer c2 ON c1.SeatingID = c2.SeatingID AND c1.BusID = c2.BusID
SET c1.Customer = c2.ID --or SET c1.Customer = c2.PassengerName or whatever you want.

SET子句中,你可以设置你想更新的列,你也可以JOIN这两个表基于任何谓词,我用c1.SeatingID = c2.SeatingID AND c1.BusID = c2.BusID,但是你可以选择适合你的需要。

Here is a SQL Fiddle demo

【讨论】:

我尝试使用所有连接但过滤的数据不正确。尽管有更多匹配的记录,但只更新较少的列数.. @Uma,过滤的数据怎么不正确?我的查询有什么问题?你能进一步解释一下吗?您必须定义条件连接propelry,如果您有多个匹配列,可能需要添加更多谓词。您能否设置一个演示来解释 SQL fiddle 中的问题,或者用这个不正确的结果编辑我的Demo query ON SQL Fiddle,以及您想从这个查询中得到什么正确的结果。谢谢 更新日历 ca left join customer c on c.DateofTravel=ca.Date and c.SeatingID=ca.SeatingID and c.BusID=ca.BusID set ca.Customer=c.ID;跨度> 【参考方案2】:

试试这个代码:

UPDATE calendar cal, customer cust 
SET cal.Customer = cust.ID
where cal.SeatingID = cust.SeatingID 
and cal.BusID = cust.BusID
and cal.DATE = cust.DateOfTravel;

SQL Fiddle演示

Here是指向update的更多信息的链接。

【讨论】:

【参考方案3】:
update calendar ca left join customer c 
on c.DateofTravel=ca.Date and c.SeatingID=ca.SeatingID and c.BusID=ca.BusID 
set 
ca.Customer=c.ID;

【讨论】:

【参考方案4】:

使用此查询将帮助您从另一个表列更新表列:

UPDATE tableName1 AS tb1
INNER JOIN tableName2 AS tb2 
ON (tb1.columnName= tb2.columnName) 
SET tb1.updatedColumn = tb2.updatedColumnValue
WHERE ADD HERE CONDITION IF REQUIRED

【讨论】:

以上是关于根据mysql中其他表中的匹配值更新列的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 触发器 - 复制新的。插入的数据与现有的列值进行比较,如果它们匹配,则将它们插入到其他表中

如何根据同一张表中的其他列匹配替换空值

MySQL - 根据更新其他表列值触发更新列值

MySQL选择其他表中没有匹配列的行

如何用另一个表中的匹配值替换/更新列中每个字符串的所有实例?

根据其他表中的值更新表列