根据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
第二个表Calendar
的Customer
字段从第一个表Customer
通过JOIN
ing这两个表像这样:
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 触发器 - 复制新的。插入的数据与现有的列值进行比较,如果它们匹配,则将它们插入到其他表中